File: ErrorDialog.cpp

package info (click to toggle)
audacity 3.7.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 134,800 kB
  • sloc: cpp: 366,277; ansic: 198,323; lisp: 7,761; sh: 3,414; python: 1,501; xml: 1,385; perl: 854; makefile: 125
file content (145 lines) | stat: -rw-r--r-- 3,536 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**********************************************************************

  Audacity: A Digital Audio Editor

  ErrorDialog.cpp

  Jimmy Johnson
  Leland Lucius

*******************************************************************//**

\class ErrorDialog
\brief Gives an Error message with an option for help.

*//********************************************************************/


#include "ErrorDialog.h"

#include <wx/app.h>
#include <wx/collpane.h>
#include <wx/icon.h>
#include <wx/sizer.h>
#include <wx/statbmp.h>
#include <wx/stattext.h>
#include <wx/html/htmlwin.h>
#include <wx/settings.h>
#include <wx/statusbr.h>
#include <wx/textctrl.h>
#include <wx/artprov.h>

#include "AllThemeResources.h"
#include "CodeConversions.h"
#include "ShuttleGui.h"
#include "HelpText.h"
#include "Prefs.h"
#include "HelpSystem.h"

BEGIN_EVENT_TABLE(ErrorDialog, wxDialogWrapper)
   EVT_COLLAPSIBLEPANE_CHANGED( wxID_ANY, ErrorDialog::OnPane )
   EVT_BUTTON( wxID_OK, ErrorDialog::OnOk)
   EVT_BUTTON( wxID_HELP, ErrorDialog::OnHelp)
END_EVENT_TABLE()

ErrorDialog::ErrorDialog(
   wxWindow *parent,
   const TranslatableString & dlogTitle,
   const TranslatableString & message,
   const ManualPageID & helpPage,
   const std::wstring & log,
   const bool Close, const bool modal)
:  wxDialogWrapper(parent, wxID_ANY, dlogTitle,
                   wxDefaultPosition, wxDefaultSize,
                   wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
{
   SetName();

   long buttonMask;

   // only add the help button if we have a URL
   buttonMask = (helpPage.empty()) ? eOkButton : (eHelpButton | eOkButton);
   dhelpPage = helpPage;
   dClose = Close;
   dModal = modal;

   ShuttleGui S(this, eIsCreating);

   S.SetBorder(2);
   S.StartHorizontalLay(wxEXPAND, 0);
   {
      S.SetBorder(20);
      wxBitmap bitmap = wxArtProvider::GetBitmap(wxART_WARNING);
      S.AddWindow(safenew wxStaticBitmap(S.GetParent(), -1, bitmap));

      S.SetBorder(20);
      S.AddFixedText(message, false, 500);
   }
   S.EndHorizontalLay();

   S.SetBorder(2);
   if (!log.empty())
   {
      S.StartHorizontalLay(wxEXPAND, 1);
      {
         S.SetBorder(5);

         auto pane = safenew wxCollapsiblePane(S.GetParent(),
                                               wxID_ANY,
                                               XO("Show &Log...").Translation());
         S.Style(wxEXPAND | wxALIGN_LEFT);
         S.Prop(1);
         S.AddWindow(pane);

         ShuttleGui SI(pane->GetPane(), eIsCreating);
         auto text = SI.AddTextWindow(log);
         text->SetInsertionPointEnd();
         text->ShowPosition(text->GetLastPosition());
         text->SetMinSize(wxSize(700, 250));
      }
      S.EndHorizontalLay();
   }

   S.SetBorder(2);
   S.AddStandardButtons(buttonMask);

   Layout();
   GetSizer()->Fit(this);
   SetMinSize(GetSize());
   Center();
}

void ErrorDialog::OnPane(wxCollapsiblePaneEvent & event)
{
   if (!event.GetCollapsed())
   {
      Center();
   }
}

void ErrorDialog::OnOk(wxCommandEvent & WXUNUSED(event))
{
   if (dModal)
      EndModal(true);
   else
      Destroy();
}

void ErrorDialog::OnHelp(wxCommandEvent & WXUNUSED(event))
{
   const auto &str = dhelpPage.GET();
   if( str.StartsWith(wxT("innerlink:")) )
   {
      HelpSystem::ShowHtmlText(
         this,
         TitleText(str.Mid( 10 ) ),
         HelpText( str.Mid( 10 )),
         false,
         true );
      return;
   }
   HelpSystem::ShowHelp( this, dhelpPage, dClose );
   //OpenInDefaultBrowser( dhelpURL );
   if(dClose)
      EndModal(true);
}