Beispiel #1
0
        static void Main(string[] args)
        {
            Version GZZLoggerVersion = new Version(1, 0, 0, 0);

            if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
            {
                Console.SetWindowSize(130, 33);
            }
            else
            {
                Console.WriteLine("\033[8;33;130t");
            }
            Console.WriteLine("GZZ Logger -- V " + GZZLoggerVersion.ToString());
            Console.WriteLine("Checking for updates...");
            checkUpdates(GZZLoggerVersion);
            Console.Write("Loading...");
            var SessionSettings  = new Settings();                                      //Load Settings from file
            var LocationRecords  = new CallsignLocationLookup();                        //Load location DB for use with callsign prefixes
            var startContestMode = SessionSettings.ContestMode;


            Application.Init();
            if (SessionSettings.Callsign == string.Empty || SessionSettings.CurrentDatabaseName == string.Empty)
            {
                var introGui = new GUI.introGui(SessionSettings, LocationRecords);
                Application.Run(introGui.introUITopLevel());
            }

            else
            {
                var SessionDatabase = new Database(SessionSettings.CurrentDatabaseName);    //Load DB from DB name in settings
                var MainGui         = new GUI.GUIClass(SessionSettings, SessionDatabase, LocationRecords);
                var top             = MainGui.MainUIToplevel();
                Application.Run(top);
            }

            while (startContestMode != SessionSettings.ContestMode) // REDRAW IF CHANGED MODE
            {
                startContestMode = SessionSettings.ContestMode;
                var SessionDatabase = new Database(SessionSettings.CurrentDatabaseName);
                var MainGui         = new GUI.GUIClass(SessionSettings, SessionDatabase, LocationRecords);
                var top             = MainGui.MainUIToplevel();
                Application.Run(top);
            }

            Console.WriteLine("Goodbye " + SessionSettings.Callsign);
            Thread.Sleep(1000);
        }
Beispiel #2
0
        public Toplevel MainUIToplevel()
        {
            mainTop = new Toplevel();
            mainTop.ColorScheme.Normal    = Application.Driver.MakeAttribute(Color.Brown, Color.Black);
            mainTop.ColorScheme.Focus     = Application.Driver.MakeAttribute(Color.Black, Color.Brown);
            mainTop.ColorScheme.HotNormal = Application.Driver.MakeAttribute(Color.Brown, Color.Black);
            mainTop.ColorScheme.HotFocus  = Application.Driver.MakeAttribute(Color.BrightGreen, Color.Brown);

            // LOG WINDOW:
            var logWindow = new Window("log")
            {
                X      = 0,
                Y      = 1,
                Width  = Dim.Percent(70),
                Height = Dim.Percent(80)
            };

            var logListTitles = new Label(" ID     DATE     TIME    FREQ   MODE   CALLSIGN  TXE    RXE    TXR    RXR    COMMENT")
            {
                X = 0,
                Y = 0
            };

            logList = new ListView(logListRect, sessionDatabase.Records.Reverse().ToList());
            logWindow.Add(logListTitles, logList);

            // CONTACT ENTRY:
            var entryWindow = new Window("New Contact")
            {
                X      = 0,
                Y      = Pos.Percent(80),
                Width  = Dim.Percent(70),
                Height = Dim.Fill()
            };

            var callsignLabel = new Label("CALLSIGN:")
            {
                X = 0,
                Y = 1
            };

            callsignEntry = new TextField("")
            {
                X     = Pos.Right(callsignLabel),
                Y     = 1,
                Width = 10
            };

            var frequencyLabel = new Label("FREQ:")
            {
                X = 20,
                Y = 1
            };

            string tmp_freq;

            try
            {
                tmp_freq = sessionDatabase.Records.Last().FrequencyBand.ToString();
            }
            catch
            {
                tmp_freq = "";
            }

            frequencyEntry = new TextField(tmp_freq)
            {
                X     = Pos.Right(frequencyLabel),
                Y     = 1,
                Width = 6
            };

            var txExchangeLabel = new Label("TXE:")
            {
                X = 32,
                Y = 1
            };

            string tmp_exchg = "";

            try
            {
                var txExchg = Int32.Parse(sessionDatabase.Records.Last().TransmittedExchange);
                if (sessionSettings.IncramentalExchg)
                {
                    try
                    {
                        txExchg++;
                        tmp_exchg = txExchg.ToString().PadLeft(4, '0');
                    }
                    catch
                    {
                        tmp_exchg = sessionDatabase.Records.Last().TransmittedExchange.ToString();
                    }
                }
                else
                {
                    tmp_exchg = sessionDatabase.Records.Last().TransmittedExchange.ToString();
                }
            }
            catch
            {
                tmp_exchg = "0001";
            }
            txExchangeEntry = new TextField(tmp_exchg)
            {
                X     = Pos.Right(txExchangeLabel),
                Y     = 1,
                Width = 6
            };

            var rxExchangeLabel = new Label("RXE:")
            {
                X = 43,
                Y = 1
            };

            rxExchangeEntry = new TextField("")
            {
                X     = Pos.Right(rxExchangeLabel),
                Y     = 1,
                Width = 6
            };

            var tmpx = 0;

            if (sessionSettings.ContestMode)
            {
                tmpx = 65;
            }
            else
            {
                tmpx = 32;
            }

            var txrLabel = new Label("TXR:")
            {
                X = tmpx,
                Y = 1
            };

            txrEntry = new TextField("59")
            {
                X     = Pos.Right(txrLabel),
                Y     = 1,
                Width = 6
            };

            var rxrLabel = new Label("RXR:")
            {
                X = tmpx + 11,
                Y = 1
            };

            rxrEntry = new TextField("59")
            {
                X     = Pos.Right(rxrLabel),
                Y     = 1,
                Width = 6
            };

            var modeLabel = new Label("MODE:")
            {
                X = 0,
                Y = 3
            };

            string tmp_mode;

            try
            {
                tmp_mode = sessionDatabase.Records.Last().Mode;
            }
            catch
            {
                tmp_mode = "";
            }

            modeEntry = new TextField(tmp_mode)
            {
                X     = Pos.Right(modeLabel),
                Y     = 3,
                Width = 5
            };

            var commentLabel = new Label("COMMENT:")
            {
                X = 15,
                Y = 3
            };

            commentEntry = new TextField("")
            {
                X     = Pos.Right(commentLabel),
                Y     = 3,
                Width = 30
            };

            var contactInsert = new Button(75, 3, "Insert")
            {
                Clicked = () =>
                {
                    bool okpressed  = false;
                    bool dupContact = false;
                    foreach (var log in sessionDatabase.Records.Reverse().ToList())
                    {
                        if ((log.Callsign.Contains(callsignEntry.Text.ToString().ToUpper())) && log.FrequencyBand.ToString().Substring(0, 2).Contains(frequencyEntry.Text.ToString().Substring(0, 2)))
                        {
                            dupContact = true;
                        }
                    }

                    if (dupContact)
                    {
                        var ok = new Button("Yes")
                        {
                            Clicked = () => { Application.RequestStop(); okpressed = true; }
                        };
                        var cancel = new Button("No")
                        {
                            Clicked = () => Application.RequestStop()
                        };
                        var dialog = new Dialog("Error", 60, 7, ok, cancel);
                        var lable  = new Label("Duplicate contact, add anyway?");
                        dialog.Add(lable);
                        Application.Run(dialog);
                    }
                    if (okpressed || !dupContact)
                    {
                        GUIAddRecord();
                        updateStats(callsignEntry.Text.ToString().ToUpper());
                    }
                    callsignEntry.Used   = false;
                    frequencyEntry.Used  = false;
                    txrEntry.Used        = false;
                    rxrEntry.Used        = false;
                    txExchangeEntry.Used = false;
                    rxExchangeEntry.Used = false;
                    commentEntry.Used    = false;
                    modeEntry.Used       = false;
                    callsignEntry.Text   = "";
                    frequencyEntry.Text  = sessionDatabase.Records.Last().FrequencyBand.ToString();
                    try
                    {
                        var txExchg = Int32.Parse(sessionDatabase.Records.Last().TransmittedExchange);
                        if (sessionSettings.IncramentalExchg)
                        {
                            try
                            {
                                txExchg++;
                                tmp_exchg = txExchg.ToString().PadLeft(4, '0');
                            }
                            catch
                            {
                                tmp_exchg = sessionDatabase.Records.Last().TransmittedExchange.ToString();
                            }
                        }
                        else
                        {
                            tmp_exchg = sessionDatabase.Records.Last().TransmittedExchange.ToString();
                        }
                    }
                    catch
                    {
                        tmp_exchg = "";
                    }
                    txExchangeEntry.Text = tmp_exchg;
                    rxExchangeEntry.Text = "";
                    commentEntry.Text    = "";
                    modeEntry.Text       = sessionDatabase.Records.Last().Mode;
                    logList.SetSource(sessionDatabase.Records.Reverse().ToList());
                    logList.Redraw(logListRect);
                    mainTop.SetFocus(callsignEntry);
                    Application.Refresh();
                }
            };

            if (sessionSettings.ContestMode)
            {
                entryWindow.Add(callsignLabel,
                                callsignEntry,
                                frequencyLabel,
                                frequencyEntry,
                                txExchangeLabel,
                                txExchangeEntry,
                                rxExchangeLabel,
                                rxExchangeEntry,
                                modeLabel,
                                modeEntry,
                                commentLabel,
                                commentEntry,
                                contactInsert,
                                txrLabel,
                                txrEntry,
                                rxrLabel,
                                rxrEntry);
            }
            else
            {
                entryWindow.Add(callsignLabel,
                                callsignEntry,
                                frequencyLabel,
                                frequencyEntry,
                                txrLabel,
                                txrEntry,
                                rxrLabel,
                                rxrEntry,
                                modeLabel,
                                modeEntry,
                                commentLabel,
                                commentEntry,
                                contactInsert);
            }

            //STAT Window
            var statWindow = new Window("Statistics")
            {
                X      = Pos.Percent(70),
                Y      = 1,
                Width  = Dim.Fill(),
                Height = Dim.Fill()
            };

            var callsignStatLabel = new Label("CALLSIGN: ")
            {
                X = 0,
                Y = 0
            };

            var continentStatLabel = new Label("CONTINENT: ")
            {
                X = 0,
                Y = 1
            };

            var countryStatLabel = new Label("COUNTRY: ")
            {
                X = 0,
                Y = 2
            };

            var ituStatLabel = new Label("ITU: ")
            {
                X = 0,
                Y = 3
            };

            var cqStatLabel = new Label("CQ: ")
            {
                X = 0,
                Y = 4
            };

            var countStatLabel = new Label("CONTACT #:")
            {
                X = 0,
                Y = 7
            };

            statWindow.Add(callsignStatLabel,
                           continentStatLabel,
                           countryStatLabel,
                           ituStatLabel,
                           cqStatLabel,
                           countStatLabel);

            var menu = new MenuBar(new MenuBarItem[] {
                new MenuBarItem("_File", new MenuItem [] {
                    new MenuItem("_New", "Creates new file", () =>
                    {
                        var newFileTop = new introGui(sessionSettings, locationLookup);
                        Application.Run(newFileTop.introUITopLevel());
                    }),
                    new MenuItem("_Open", "Open old database", null),
                    new MenuItem("_Export", "Export Cabrilo", () =>
                    {
                        var name           = new Label(1, 1, "Name: ");
                        var address1       = new Label(1, 3, "Address: ");
                        var email          = new Label(1, 9, "Email: ");
                        var loaction       = new Label(1, 11, "Location: ");
                        var operatorNum    = new Label(1, 13, "Operator: ");
                        var assisted       = new Label(1, 15, "Assisted: ");
                        var stationType    = new Label(1, 17, "Station: ");
                        var transmitterNum = new Label(1, 19, "TX Num.:");

                        var nameInput = new TextField(sessionSettings.UserName)
                        {
                            X     = 10,
                            Y     = 1,
                            Width = 45
                        };
                        var address1Input = new TextField(sessionSettings.Address[0])
                        {
                            X     = 10,
                            Y     = 3,
                            Width = 45
                        };
                        var address2Input = new TextField(sessionSettings.Address[1])
                        {
                            X     = 10,
                            Y     = 4,
                            Width = 45
                        };
                        var address3Input = new TextField(sessionSettings.Address[2])
                        {
                            X     = 10,
                            Y     = 5,
                            Width = 45
                        };
                        var address4Input = new TextField(sessionSettings.Address[3])
                        {
                            X     = 10,
                            Y     = 6,
                            Width = 45
                        };
                        var address5Input = new TextField(sessionSettings.Address[4])
                        {
                            X     = 10,
                            Y     = 7,
                            Width = 45
                        };
                        var emailInput = new TextField(sessionSettings.Email)
                        {
                            X     = 10,
                            Y     = 9,
                            Width = 45
                        };
                        var locationInput = new TextField("DX")
                        {
                            X     = 10,
                            Y     = 11,
                            Width = 45
                        };
                        var operatorNumInput = new TextField("SINGLE-OP")
                        {
                            X     = 10,
                            Y     = 13,
                            Width = 45
                        };
                        var assistedInput = new TextField("NON-ASSISTED")
                        {
                            X     = 10,
                            Y     = 15,
                            Width = 45
                        };
                        var stationInput = new TextField("FIXED")
                        {
                            X     = 10,
                            Y     = 17,
                            Width = 45
                        };
                        var transInput = new TextField("ONE")
                        {
                            X     = 10,
                            Y     = 19,
                            Width = 45
                        };
                        var ok = new Button("Ok")
                        {
                            Clicked = () =>
                            {
                                sessionSettings.Location    = locationInput.Text.ToString().ToUpper();
                                sessionSettings.OpNum       = operatorNumInput.Text.ToString().ToUpper();
                                sessionSettings.Assisted    = assistedInput.Text.ToString().ToUpper();
                                sessionSettings.StationType = stationInput.Text.ToString().ToUpper();
                                sessionSettings.TransNum    = transInput.Text.ToString().ToUpper();
                                sessionSettings.UserName    = nameInput.Text.ToString().ToUpper();
                                sessionSettings.Email       = emailInput.Text.ToString().ToUpper();
                                sessionSettings.Address     = new string[] { address1Input.Text.ToString(), address2Input.Text.ToString(), address3Input.Text.ToString(), address4Input.Text.ToString(), address5Input.Text.ToString() };
                                var export = new ImportExport(sessionDatabase, sessionSettings);
                                if (sessionSettings.ContestMode)
                                {
                                    export.exportCabrillo();
                                }
                                else
                                {
                                    export.exportNormal();
                                }
                                Application.RequestStop();
                                var ok2 = new Button("OK")
                                {
                                    Clicked = () =>
                                    {
                                        Application.RequestStop();
                                    }
                                };
                                var doneDialog = new Dialog("Export", 70, 7, ok2);
                                Label doneText;
                                if (sessionSettings.ContestMode)
                                {
                                    doneText = new Label("Exported to \"" + sessionSettings.ContestName + ".txt\" in your Documents folder.");
                                }
                                else
                                {
                                    doneText = new Label("Exported to \"" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt\" in your Documents folder.");
                                }
                                doneDialog.Add(doneText);
                                Application.Run(doneDialog);
                            }
                        };
                        var dialog = new Dialog("Export", 60, 30, ok);
                        if (sessionSettings.ContestMode)
                        {
                            dialog.Add(name,
                                       address1,
                                       email,
                                       loaction,
                                       operatorNum,
                                       assisted,
                                       stationType,
                                       transmitterNum,
                                       nameInput,
                                       address1Input,
                                       address2Input,
                                       address3Input,
                                       address4Input,
                                       address5Input,
                                       emailInput,
                                       locationInput,
                                       operatorNumInput,
                                       assistedInput,
                                       stationInput,
                                       transInput
                                       );
                        }
                        else
                        {
                            dialog.Add(name,
                                       address1,
                                       email,
                                       nameInput,
                                       address1Input,
                                       address2Input,
                                       address3Input,
                                       address4Input,
                                       address5Input,
                                       emailInput
                                       );
                        }

                        Application.Run(dialog);
                    }),
                    new MenuItem("_Quit", "", () =>
                    {
                        mainTop.Running = false;
                    })
                }),
                new MenuBarItem("_Setting", new MenuItem [] {
                    new MenuItem("_Contest mode >", sessionSettings.ContestMode.ToString(), () =>
                    {
                        sessionSettings.ContestMode = !sessionSettings.ContestMode;
                        mainTop.Running             = false;
                    }),
                    new MenuItem("_Edit Settings", "Not yet implamented", () =>
                    {
                    })
                })
            });

            menu.ColorScheme.Normal   = Application.Driver.MakeAttribute(Color.Brown, Color.Black);
            menu.ColorScheme.Focus    = Application.Driver.MakeAttribute(Color.Brown, Color.Black);
            menu.ColorScheme.HotFocus = Application.Driver.MakeAttribute(Color.BrightGreen, Color.Black);


            //menu bar info:
            var logFileNameLabel  = new Label(30, 0, "File: " + sessionSettings.CurrentDatabaseName);
            var userCallsignLabel = new Label(60, 0, sessionSettings.Callsign);
            var contestNameLabel  = new Label(80, 0, "");

            if (sessionSettings.ContestMode)
            {
                contestNameLabel = new Label(80, 0, "Contest: " + sessionSettings.ContestName);
            }


            enterKeyEventEdit        = logList.ProcessKey(new KeyEvent(Key.Enter));
            logList.SelectedChanged += LogList_SelectedChanged;

            callsignEntry.Changed += CallsignEntry_Changed;
            string tmp_callsign;

            try
            {
                tmp_callsign = sessionDatabase.Records.Last().Callsign;
            }
            catch
            {
                tmp_callsign = "";
            }
            updateStats(tmp_callsign);


            mainTop.Add(menu, entryWindow, logWindow, statWindow, logFileNameLabel, userCallsignLabel, contestNameLabel);
            return(mainTop);
        }