UI project 'main' module
authorwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 13 May 2012 16:30:12 +0000 (16:30 +0000)
committerwittend99 <wittend99@01035d8c-6547-0410-b346-abe4f91aad63>
Sun, 13 May 2012 16:30:12 +0000 (16:30 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@439 01035d8c-6547-0410-b346-abe4f91aad63

fdmdv2/fdmdv2_main.cpp [new file with mode: 0644]

diff --git a/fdmdv2/fdmdv2_main.cpp b/fdmdv2/fdmdv2_main.cpp
new file mode 100644 (file)
index 0000000..1bccb5e
--- /dev/null
@@ -0,0 +1,457 @@
+//==========================================================================\r
+// Name:            fdmdv2_main.cpp\r
+// Purpose:         Implements simple wxWidgets application with GUI.\r
+// Created:         Apr. 9, 2012
+// Initial author:  David Witten\r
+// License:         BSD License (other licenses may apply to other\r
+//                  components of this project)\r
+//==========================================================================\r
+#include "fdmdv2_main.h"\r
+\r
+#define wxUSE_FILEDLG   1\r
+#define wxUSE_LIBPNG    1\r
+#define wxUSE_LIBJPEG   1\r
+#define wxUSE_GIF       1\r
+#define wxUSE_PCX       1\r
+#define wxUSE_LIBTIFF   1\r
+\r
+// initialize the application\r
+IMPLEMENT_APP(MainApp);\r
+\r
+// `Main program' equivalent: the program execution "starts" here\r
+//-------------------------------------------------------------------------\r
+// OnInit()\r
+//-------------------------------------------------------------------------\r
+bool MainApp::OnInit()\r
+{\r
+    if(!wxApp::OnInit())\r
+    {\r
+        return false;\r
+    }\r
+    // Create the main application window\r
+    MainFrame *frame = new MainFrame(NULL);\r
+\r
+    frame->m_panelSpectrum = new DrawPanel((wxFrame*) frame->m_auiNbookCtrl );\r
+    frame->m_auiNbookCtrl->AddPage(frame->m_panelSpectrum, _("Spectrum"), true, wxNullBitmap );\r
+\r
+    frame->m_panelWaterfall = new DrawPanel((wxFrame*) frame->m_auiNbookCtrl );\r
+    frame->m_auiNbookCtrl->AddPage(frame->m_panelWaterfall, _("Waterfall"), true, wxNullBitmap );\r
+\r
+    SetTopWindow(frame);\r
+    frame->Layout();\r
+    frame->Show();\r
+    return true;\r
+}\r
+\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+// Class MainFrame(wxFrame* parent) : TopFrame(parent)\r
+//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=\r
+MainFrame::MainFrame(wxWindow *parent) : TopFrame(parent)\r
+{\r
+    m_radioRunning      = false;\r
+//    m_bitmap = bitmap;\r
+    m_sound = NULL;\r
+    m_zoom  = 1.;\r
+\r
+}\r
+\r
+MainFrame::~MainFrame()\r
+{\r
+}\r
+\r
+void MainFrame::OnCloseFrame(wxCloseEvent& event)\r
+{\r
+    Destroy();\r
+}\r
+\r
+void MainFrame::OnExitClick(wxCommandEvent& event)\r
+{\r
+    Destroy();\r
+}\r
+\r
+void MainFrame::OnPaint(wxPaintEvent& WXUNUSED(event))\r
+{\r
+    wxPaintDC dc(this);\r
+\r
+    if(GetMenuBar()->IsChecked(ID_PAINT_BG))\r
+    {\r
+        dc.Clear();\r
+    }\r
+    dc.SetUserScale(m_zoom, m_zoom);\r
+    const wxSize size = GetClientSize();\r
+    dc.DrawBitmap(m_bitmap, dc.DeviceToLogicalX((size.x - m_zoom * m_bitmap.GetWidth()) / 2), dc.DeviceToLogicalY((size.y - m_zoom * m_bitmap.GetHeight()) / 2), true);\r
+}\r
+\r
+void MainFrame::OnCmdSliderScroll(wxScrollEvent& event)\r
+{\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCmdSliderScrollChanged(wxScrollEvent& event)\r
+{\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnSliderScrollTop(wxScrollEvent& event)\r
+{\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnSliderScrollBottom(wxScrollEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnSliderScrollBottom", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCheckSQClick(wxCommandEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnCheckSQClick", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnTogBtnTXClick(wxCommandEvent& event)\r
+{\r
+    m_soundFile = wxT("./hts1a.wav");\r
+    m_sound = new wxSound(m_soundFile, false);\r
+    m_sound->Play();\r
+}\r
+\r
+void MainFrame::OnTogBtnRxID(wxCommandEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnTogBtnRxID", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnTogBtnTxID(wxCommandEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnTogBtnTxID", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnTogBtnSplitClick(wxCommandEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnTogBtnSplitClick", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnTogBtnAnalogClick (wxCommandEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnTogBtnAnalogClick", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnTogBtnALCClick(wxCommandEvent& event)\r
+{\r
+    wxMessageBox("Got Click!", "OnTogBtnALCClick", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnOpen( wxCommandEvent& event )\r
+{\r
+    wxMessageBox("Got Click!", "OnOpen", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnOpenUpdateUI( wxUpdateUIEvent& event )\r
+{\r
+//    wxMessageBox("Got Click!", "OnOpenUpdateUI", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnSaveUpdateUI( wxUpdateUIEvent& event )\r
+{\r
+//    wxMessageBox("Got Click!", "OnSaveUpdateUI", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnClose( wxCommandEvent& event )\r
+{\r
+    if(m_sound != NULL)\r
+    {\r
+//        if(m_sound->IsPlaying())\r
+//        {\r
+            m_sound->Stop();\r
+            m_sound = NULL;\r
+//        }\r
+    }\r
+//    wxMessageBox("Got Click!", "OnClose", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCloseUpdateUI( wxUpdateUIEvent& event )\r
+{\r
+//    wxMessageBox("Got Click!", "OnCloseUpdateUI", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnExit( wxCommandEvent& event )\r
+{\r
+    wxMessageBox("Got Click!", "OnExit", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCopy( wxCommandEvent& event )\r
+{\r
+    wxMessageBox("Got Click!", "OnCopy", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCopyUpdateUI( wxUpdateUIEvent& event )\r
+{\r
+//    wxMessageBox("Got Click!", "OnCopyUpdateUI", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCut( wxCommandEvent& event )\r
+{\r
+    wxMessageBox("Got Click!", "OnCut", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnCutUpdateUI( wxUpdateUIEvent& event )\r
+{\r
+//    wxMessageBox("Got Click!", "OnCutUpdateUI", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnPaste( wxCommandEvent& event )\r
+{\r
+    wxMessageBox("Got Click!", "OnPaste", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnPasteUpdateUI( wxUpdateUIEvent& event )\r
+{\r
+//    wxMessageBox("Got Click!", "OnPasteUpdateUI", wxOK);\r
+//    event.Skip();\r
+}\r
+\r
+void MainFrame::OnToolsOptions( wxCommandEvent& event )\r
+{\r
+    OptionsDlg *dlg = new OptionsDlg(NULL);\r
+    dlg->ShowModal();\r
+}\r
+\r
+void MainFrame::OnToolsOptionsUI( wxUpdateUIEvent& event )\r
+{\r
+//    OptionsDlg *dlg = new OptionsDlg(NULL);\r
+//    dlg->ShowModal();\r
+}\r
+\r
+void MainFrame::OnToolsAudio( wxCommandEvent& event )\r
+{\r
+    AudioDlg *dlg = new AudioDlg(NULL);\r
+    dlg->ShowModal();\r
+}\r
+\r
+void MainFrame::OnToolsAudioUI( wxUpdateUIEvent& event )\r
+{\r
+//    OptionsDlg *dlg = new OptionsDlg(NULL);\r
+//    dlg->ShowModal();\r
+}\r
+\r
+void MainFrame::OnToolsComCfg( wxCommandEvent& event )\r
+{\r
+    ComPortsDlg *dlg = new ComPortsDlg(NULL);\r
+    dlg->ShowModal();\r
+}\r
+\r
+void MainFrame::OnToolsComCfgUI( wxUpdateUIEvent& event )\r
+{\r
+    event.Enable(!m_radioRunning);\r
+}\r
+\r
+void MainFrame::OnHelpCheckUpdates( wxCommandEvent& event )\r
+{\r
+    wxMessageBox("Got Click!", "OnHelpCheckUpdates", wxOK);\r
+    event.Skip();\r
+}\r
+\r
+void MainFrame::OnHelpCheckUpdatesUI( wxUpdateUIEvent& event )\r
+{\r
+}\r
+\r
+void MainFrame::OnHelpAbout( wxCommandEvent& event )\r
+{\r
+    AboutDlg *dlg = new AboutDlg(NULL);\r
+    dlg->ShowModal();\r
+}\r
+\r
+\r
+wxString MainFrame::LoadUserImage(wxImage& image)\r
+{\r
+    wxString filename;\r
+\r
+    filename = wxLoadFileSelector(wxT("image"), wxEmptyString);\r
+    if(!filename.empty())\r
+    {\r
+        if(!image.LoadFile(filename))\r
+        {\r
+            wxLogError(wxT("Couldn't load image from '%s'."), filename.c_str());\r
+            return wxEmptyString;\r
+        }\r
+    }\r
+    return filename;\r
+}\r
+\r
+void MainFrame::OnSave(wxCommandEvent& WXUNUSED(event))\r
+{\r
+    wxImage image = m_bitmap.ConvertToImage();\r
+\r
+    wxString savefilename = wxFileSelector(wxT("Save Image"),\r
+                                           wxEmptyString,\r
+                                           wxEmptyString,\r
+                                           (const wxChar *)NULL,\r
+                                           wxT("BMP files (*.bmp)|*.bmp|")\r
+                                           wxT("PNG files (*.png)|*.png|")\r
+                                           wxT("JPEG files (*.jpg)|*.jpg|")\r
+                                           wxT("GIF files (*.gif)|*.gif|")\r
+                                           wxT("TIFF files (*.tif)|*.tif|")\r
+                                           wxT("PCX files (*.pcx)|*.pcx|")\r
+                                           wxT("ICO files (*.ico)|*.ico|")\r
+                                           wxT("CUR files (*.cur)|*.cur"),\r
+                                           wxFD_SAVE,\r
+                                           this);\r
+\r
+    if(savefilename.empty())\r
+    {\r
+        return;\r
+    }\r
+    wxString extension;\r
+    wxFileName::SplitPath(savefilename, NULL, NULL, &extension);\r
+    bool saved = false;\r
+    if(extension == wxT("bmp"))\r
+    {\r
+        static const int bppvalues[] =\r
+        {\r
+            wxBMP_1BPP,\r
+            wxBMP_1BPP_BW,\r
+            wxBMP_4BPP,\r
+            wxBMP_8BPP,\r
+            wxBMP_8BPP_GREY,\r
+            wxBMP_8BPP_RED,\r
+            wxBMP_8BPP_PALETTE,\r
+            wxBMP_24BPP\r
+        };\r
+\r
+        const wxString bppchoices[] =\r
+        {\r
+            wxT("1 bpp color"),\r
+            wxT("1 bpp B&W"),\r
+            wxT("4 bpp color"),\r
+            wxT("8 bpp color"),\r
+            wxT("8 bpp greyscale"),\r
+            wxT("8 bpp red"),\r
+            wxT("8 bpp own palette"),\r
+            wxT("24 bpp")\r
+        };\r
+\r
+        int bppselection = wxGetSingleChoiceIndex(wxT("Set BMP BPP"),\r
+                           wxT("Image sample: save file"),\r
+                           WXSIZEOF(bppchoices),\r
+                           bppchoices,\r
+                           this);\r
+        if(bppselection != -1)\r
+        {\r
+            int format = bppvalues[bppselection];\r
+\r
+            image.SetOption(wxIMAGE_OPTION_BMP_FORMAT, format);\r
+            if(format == wxBMP_8BPP_PALETTE)\r
+            {\r
+                unsigned char *cmap = new unsigned char [256];\r
+                for(int i = 0; i < 256; i++)\r
+                {\r
+                    cmap[i] = (unsigned char)i;\r
+                }\r
+                image.SetPalette(wxPalette(256, cmap, cmap, cmap));\r
+                delete[] cmap;\r
+            }\r
+        }\r
+    }\r
+    else if(extension == wxT("png"))\r
+    {\r
+        static const int pngvalues[] =\r
+        {\r
+            wxPNG_TYPE_COLOUR,\r
+            wxPNG_TYPE_COLOUR,\r
+            wxPNG_TYPE_GREY,\r
+            wxPNG_TYPE_GREY,\r
+            wxPNG_TYPE_GREY_RED,\r
+            wxPNG_TYPE_GREY_RED,\r
+        };\r
+\r
+        const wxString pngchoices[] =\r
+        {\r
+            wxT("Colour 8bpp"),\r
+            wxT("Colour 16bpp"),\r
+            wxT("Grey 8bpp"),\r
+            wxT("Grey 16bpp"),\r
+            wxT("Grey red 8bpp"),\r
+            wxT("Grey red 16bpp"),\r
+        };\r
+\r
+        int sel = wxGetSingleChoiceIndex(wxT("Set PNG format"),\r
+                                         wxT("Image sample: save file"),\r
+                                         WXSIZEOF(pngchoices),\r
+                                         pngchoices,\r
+                                         this);\r
+        if(sel != -1)\r
+        {\r
+            image.SetOption(wxIMAGE_OPTION_PNG_FORMAT, pngvalues[sel]);\r
+            image.SetOption(wxIMAGE_OPTION_PNG_BITDEPTH, sel % 2 ? 16 : 8);\r
+\r
+            // these values are taken from OptiPNG with -o3 switch\r
+            const wxString compressionChoices[] =\r
+            {\r
+                wxT("compression = 9, memory = 8, strategy = 0, filter = 0"),\r
+                wxT("compression = 9, memory = 9, strategy = 0, filter = 0"),\r
+                wxT("compression = 9, memory = 8, strategy = 1, filter = 0"),\r
+                wxT("compression = 9, memory = 9, strategy = 1, filter = 0"),\r
+                wxT("compression = 1, memory = 8, strategy = 2, filter = 0"),\r
+                wxT("compression = 1, memory = 9, strategy = 2, filter = 0"),\r
+                wxT("compression = 9, memory = 8, strategy = 0, filter = 5"),\r
+                wxT("compression = 9, memory = 9, strategy = 0, filter = 5"),\r
+                wxT("compression = 9, memory = 8, strategy = 1, filter = 5"),\r
+                wxT("compression = 9, memory = 9, strategy = 1, filter = 5"),\r
+                wxT("compression = 1, memory = 8, strategy = 2, filter = 5"),\r
+                wxT("compression = 1, memory = 9, strategy = 2, filter = 5"),\r
+            };\r
+\r
+            int sel = wxGetSingleChoiceIndex(wxT("Select compression option (Cancel to use default)\n"),\r
+                                             wxT("PNG Compression Options"),\r
+                                             WXSIZEOF(compressionChoices),\r
+                                             compressionChoices,\r
+                                             this);\r
+            if(sel != -1)\r
+            {\r
+                const int zc[] = {9, 9, 9, 9, 1, 1, 9, 9, 9, 9, 1, 1};\r
+                const int zm[] = {8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9};\r
+                const int zs[] = {0, 0, 1, 1, 2, 2, 0, 0, 1, 1, 2, 2};\r
+                const int f[]  = {0x08, 0x08, 0x08, 0x08, 0x08, 0x08,\r
+                                  0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8\r
+                                 };\r
+\r
+                image.SetOption(wxIMAGE_OPTION_PNG_COMPRESSION_LEVEL      , zc[sel]);\r
+                image.SetOption(wxIMAGE_OPTION_PNG_COMPRESSION_MEM_LEVEL  , zm[sel]);\r
+                image.SetOption(wxIMAGE_OPTION_PNG_COMPRESSION_STRATEGY   , zs[sel]);\r
+                image.SetOption(wxIMAGE_OPTION_PNG_FILTER                 , f[sel]);\r
+                image.SetOption(wxIMAGE_OPTION_PNG_COMPRESSION_BUFFER_SIZE, 1048576); // 1 MB\r
+            }\r
+        }\r
+    }\r
+    else if(extension == wxT("cur"))\r
+    {\r
+        image.Rescale(32, 32);\r
+        image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_X, 0);\r
+        image.SetOption(wxIMAGE_OPTION_CUR_HOTSPOT_Y, 0);\r
+        // This shows how you can save an image with explicitly\r
+        // specified image format:\r
+        saved = image.SaveFile(savefilename, wxBITMAP_TYPE_CUR);\r
+    }\r
+    if(!saved)\r
+    {\r
+        // This one guesses image format from filename extension\r
+        // (it may fail if the extension is not recognized):\r
+        image.SaveFile(savefilename);\r
+    }\r
+}\r