1 
2 #include "formatindentdlg.h"
3 
4 #ifndef CB_PRECOMP
5     #include <editormanager.h>
6     #include <configmanager.h>
7     #include <cbstyledtextctrl.h>
8     #include "cbeditor.h"
9 #endif
10 
11 //(*InternalHeaders(FormatIndentDlg)
12 #include <wx/intl.h>
13 #include <wx/button.h>
14 #include <wx/string.h>
15 //*)
16 
17 //(*IdInit(FormatIndentDlg)
18 const long FormatIndentDlg::ID_STATICTEXT1 = wxNewId();
19 const long FormatIndentDlg::ID_STATICTEXT3 = wxNewId();
20 const long FormatIndentDlg::ID_RADIOBUTTON1 = wxNewId();
21 const long FormatIndentDlg::ID_RADIOBUTTON2 = wxNewId();
22 const long FormatIndentDlg::ID_RADIOBUTTON3 = wxNewId();
23 const long FormatIndentDlg::ID_PANEL1 = wxNewId();
24 const long FormatIndentDlg::ID_STATICTEXT2 = wxNewId();
25 const long FormatIndentDlg::ID_CHECKBOX2 = wxNewId();
26 const long FormatIndentDlg::ID_CHECKBOX3 = wxNewId();
27 const long FormatIndentDlg::ID_CHECKBOX4 = wxNewId();
28 const long FormatIndentDlg::ID_CHECKBOX5 = wxNewId();
29 const long FormatIndentDlg::ID_CHECKBOX6 = wxNewId();
30 const long FormatIndentDlg::ID_CHECKBOX1 = wxNewId();
31 const long FormatIndentDlg::ID_CHECKBOX7 = wxNewId();
32 const long FormatIndentDlg::ID_CHECKBOX8 = wxNewId();
33 const long FormatIndentDlg::ID_CHECKBOX9 = wxNewId();
34 const long FormatIndentDlg::ID_CHECKBOX10 = wxNewId();
35 const long FormatIndentDlg::ID_PANEL3 = wxNewId();
36 const long FormatIndentDlg::ID_CHECKBOX11 = wxNewId();
37 const long FormatIndentDlg::ID_CHECKBOX12 = wxNewId();
38 const long FormatIndentDlg::ID_CHECKBOX13 = wxNewId();
39 const long FormatIndentDlg::ID_STATICTEXT4 = wxNewId();
40 const long FormatIndentDlg::ID_SPINCTRL1 = wxNewId();
41 const long FormatIndentDlg::ID_PANEL2 = wxNewId();
42 const long FormatIndentDlg::ID_NOTEBOOK1 = wxNewId();
43 //*)
44 
BEGIN_EVENT_TABLE(FormatIndentDlg,wxDialog)45 BEGIN_EVENT_TABLE(FormatIndentDlg,wxDialog)
46 	//(*EventTable(FormatIndentDlg)
47 	//*)
48 	EVT_BUTTON  (wxID_OK, FormatIndentDlg::OnOK)
49 END_EVENT_TABLE()
50 
51 FormatIndentDlg::FormatIndentDlg(wxWindow* parent)
52 {
53 	//(*Initialize(FormatIndentDlg)
54 	wxBoxSizer* BoxSizer4;
55 	wxBoxSizer* BoxSizer6;
56 	wxBoxSizer* BoxSizer5;
57 	wxBoxSizer* BoxSizer7;
58 	wxBoxSizer* BoxSizer8;
59 	wxBoxSizer* BoxSizer2;
60 	wxBoxSizer* BoxSizer1;
61 	wxBoxSizer* BoxSizer9;
62 	wxStaticBoxSizer* StaticBoxSizer1;
63 	wxBoxSizer* BoxSizer3;
64 	wxStdDialogButtonSizer* StdDialogButtonSizer1;
65 
66 	Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE, _T("wxID_ANY"));
67 	BoxSizer1 = new wxBoxSizer(wxVERTICAL);
68 	Notebook1 = new wxNotebook(this, ID_NOTEBOOK1, wxDefaultPosition, wxDefaultSize, 0, _T("ID_NOTEBOOK1"));
69 	Panel1 = new wxPanel(Notebook1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1"));
70 	BoxSizer4 = new wxBoxSizer(wxVERTICAL);
71 	BoxSizer3 = new wxBoxSizer(wxVERTICAL);
72 	StaticText1 = new wxStaticText(Panel1, ID_STATICTEXT1, _("Format indent for Fortran code."), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT1"));
73 	BoxSizer3->Add(StaticText1, 0, wxALL|wxALIGN_LEFT, 5);
74 	StaticText3 = new wxStaticText(Panel1, ID_STATICTEXT3, _("Format indent for:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT3"));
75 	BoxSizer3->Add(StaticText3, 0, wxALL|wxALIGN_LEFT, 5);
76 	BoxSizer4->Add(BoxSizer3, 0, wxTOP|wxLEFT|wxRIGHT|wxEXPAND, 5);
77 	BoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
78 	BoxSizer2->Add(-1,-1,0, wxLEFT|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 9);
79 	rb_ActiveProject = new wxRadioButton(Panel1, ID_RADIOBUTTON1, _("Active project"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP, wxDefaultValidator, _T("ID_RADIOBUTTON1"));
80 	BoxSizer2->Add(rb_ActiveProject, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
81 	rb_CurrentFile = new wxRadioButton(Panel1, ID_RADIOBUTTON2, _("Current file"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_RADIOBUTTON2"));
82 	BoxSizer2->Add(rb_CurrentFile, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
83 	rb_Selection = new wxRadioButton(Panel1, ID_RADIOBUTTON3, _("Selection"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_RADIOBUTTON3"));
84 	BoxSizer2->Add(rb_Selection, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
85 	BoxSizer4->Add(BoxSizer2, 0, wxBOTTOM|wxLEFT|wxRIGHT|wxALIGN_LEFT, 5);
86 	Panel1->SetSizer(BoxSizer4);
87 	BoxSizer4->Fit(Panel1);
88 	BoxSizer4->SetSizeHints(Panel1);
89 	Panel3 = new wxPanel(Notebook1, ID_PANEL3, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL3"));
90 	BoxSizer6 = new wxBoxSizer(wxVERTICAL);
91 	BoxSizer7 = new wxBoxSizer(wxHORIZONTAL);
92 	StaticText2 = new wxStaticText(Panel3, ID_STATICTEXT2, _("Options for statements:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT2"));
93 	BoxSizer7->Add(StaticText2, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
94 	BoxSizer6->Add(BoxSizer7, 0, wxTOP|wxLEFT|wxRIGHT|wxALIGN_LEFT, 5);
95 	BoxSizer8 = new wxBoxSizer(wxVERTICAL);
96 	cb_PROGafter = new wxCheckBox(Panel3, ID_CHECKBOX2, _("Indent after PROGRAM, FUNCTION, SUBROUTINE"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX2"));
97 	cb_PROGafter->SetValue(false);
98 	BoxSizer8->Add(cb_PROGafter, 1, wxALL|wxALIGN_LEFT, 2);
99 	cb_MODafter = new wxCheckBox(Panel3, ID_CHECKBOX3, _("Indent after MODULE, SUBMODULE"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX3"));
100 	cb_MODafter->SetValue(false);
101 	BoxSizer8->Add(cb_MODafter, 1, wxALL|wxALIGN_LEFT, 2);
102 	cb_CONTMod = new wxCheckBox(Panel3, ID_CHECKBOX4, _("Unindent CONTAINS at module level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX4"));
103 	cb_CONTMod->SetValue(false);
104 	BoxSizer8->Add(cb_CONTMod, 1, wxALL|wxALIGN_LEFT, 2);
105 	cb_CONTModAfter = new wxCheckBox(Panel3, ID_CHECKBOX5, _("Indent after CONTAINS at module level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX5"));
106 	cb_CONTModAfter->SetValue(false);
107 	BoxSizer8->Add(cb_CONTModAfter, 1, wxALL|wxALIGN_LEFT, 2);
108 	cb_CONTProc = new wxCheckBox(Panel3, ID_CHECKBOX6, _("Unindent CONTAINS at procedure level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX6"));
109 	cb_CONTProc->SetValue(false);
110 	BoxSizer8->Add(cb_CONTProc, 1, wxALL|wxALIGN_LEFT, 2);
111 	cb_CONTProcAfter = new wxCheckBox(Panel3, ID_CHECKBOX1, _("Indent after CONTAINS at procedure level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX1"));
112 	cb_CONTProcAfter->SetValue(false);
113 	BoxSizer8->Add(cb_CONTProcAfter, 1, wxALL|wxALIGN_LEFT, 2);
114 	cb_CONTType = new wxCheckBox(Panel3, ID_CHECKBOX7, _("Unindent CONTAINS at type definition level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX7"));
115 	cb_CONTType->SetValue(false);
116 	BoxSizer8->Add(cb_CONTType, 1, wxALL|wxALIGN_LEFT, 2);
117 	cb_CONTTypeAfter = new wxCheckBox(Panel3, ID_CHECKBOX8, _("Indent after CONTAINS at type definition level"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX8"));
118 	cb_CONTTypeAfter->SetValue(false);
119 	BoxSizer8->Add(cb_CONTTypeAfter, 1, wxALL|wxALIGN_LEFT, 2);
120 	cb_SELECTCASEafter = new wxCheckBox(Panel3, ID_CHECKBOX9, _("Indent after SELECT CASE"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX9"));
121 	cb_SELECTCASEafter->SetValue(false);
122 	BoxSizer8->Add(cb_SELECTCASEafter, 1, wxALL|wxALIGN_LEFT, 2);
123 	cb_SELECTTYPEafter = new wxCheckBox(Panel3, ID_CHECKBOX10, _("Indent after SELECT TYPE"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX10"));
124 	cb_SELECTTYPEafter->SetValue(false);
125 	BoxSizer8->Add(cb_SELECTTYPEafter, 1, wxALL|wxALIGN_LEFT, 2);
126 	BoxSizer6->Add(BoxSizer8, 1, wxALL|wxEXPAND, 5);
127 	Panel3->SetSizer(BoxSizer6);
128 	BoxSizer6->Fit(Panel3);
129 	BoxSizer6->SetSizeHints(Panel3);
130 	Panel2 = new wxPanel(Notebook1, ID_PANEL2, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL2"));
131 	BoxSizer5 = new wxBoxSizer(wxVERTICAL);
132 	cb_TrimLines = new wxCheckBox(Panel2, ID_CHECKBOX11, _("Trim lines from right"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX11"));
133 	cb_TrimLines->SetValue(false);
134 	BoxSizer5->Add(cb_TrimLines, 0, wxALL|wxALIGN_LEFT, 5);
135 	StaticBoxSizer1 = new wxStaticBoxSizer(wxVERTICAL, Panel2, _("Tab options"));
136 	cb_TabAsEditor = new wxCheckBox(Panel2, ID_CHECKBOX12, _("Same as C::B editor"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX12"));
137 	cb_TabAsEditor->SetValue(false);
138 	StaticBoxSizer1->Add(cb_TabAsEditor, 0, wxALL|wxALIGN_LEFT, 2);
139 	cb_UseTabs = new wxCheckBox(Panel2, ID_CHECKBOX13, _("Use tabs instead of spaces"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX13"));
140 	cb_UseTabs->SetValue(false);
141 	StaticBoxSizer1->Add(cb_UseTabs, 0, wxALL|wxALIGN_LEFT, 2);
142 	BoxSizer9 = new wxBoxSizer(wxHORIZONTAL);
143 	stxt_TabSpaces = new wxStaticText(Panel2, ID_STATICTEXT4, _("Indent size in spaces:"), wxDefaultPosition, wxDefaultSize, 0, _T("ID_STATICTEXT4"));
144 	BoxSizer9->Add(stxt_TabSpaces, 0, wxRIGHT|wxALIGN_CENTER_VERTICAL, 4);
145 	spc_Spaces = new wxSpinCtrl(Panel2, ID_SPINCTRL1, _T("0"), wxDefaultPosition, wxDefaultSize, 0, 1, 16, 0, _T("ID_SPINCTRL1"));
146 	spc_Spaces->SetValue(_T("0"));
147 	BoxSizer9->Add(spc_Spaces, 1, wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 2);
148 	StaticBoxSizer1->Add(BoxSizer9, 0, wxALL|wxALIGN_LEFT, 2);
149 	BoxSizer5->Add(StaticBoxSizer1, 0, wxALL|wxALIGN_LEFT, 5);
150 	Panel2->SetSizer(BoxSizer5);
151 	BoxSizer5->Fit(Panel2);
152 	BoxSizer5->SetSizeHints(Panel2);
153 	Notebook1->AddPage(Panel1, _("Scope"), false);
154 	Notebook1->AddPage(Panel3, _("Statements"), false);
155 	Notebook1->AddPage(Panel2, _("Others"), false);
156 	BoxSizer1->Add(Notebook1, 1, wxALL|wxEXPAND, 5);
157 	StdDialogButtonSizer1 = new wxStdDialogButtonSizer();
158 	StdDialogButtonSizer1->AddButton(new wxButton(this, wxID_OK, wxEmptyString));
159 	StdDialogButtonSizer1->AddButton(new wxButton(this, wxID_CANCEL, wxEmptyString));
160 	StdDialogButtonSizer1->Realize();
161 	BoxSizer1->Add(StdDialogButtonSizer1, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
162 	SetSizer(BoxSizer1);
163 	BoxSizer1->Fit(this);
164 	BoxSizer1->SetSizeHints(this);
165 
166 	Connect(ID_CHECKBOX12,wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)&FormatIndentDlg::OnCbTabAsEditorClick);
167 	//*)
168 
169 	rb_Selection->Disable();
170 	if (!Manager::Get()->GetEditorManager())
171         return;
172     cbEditor* ed = Manager::Get()->GetEditorManager()->GetBuiltinActiveEditor();
173     if (!ed)
174     {
175         rb_ActiveProject->SetValue(true);
176         rb_CurrentFile->Disable();
177         return;
178     }
179     cbStyledTextCtrl* control = ed->GetControl();
180     if (!control)
181         return;
182     if (!control->GetSelectedText().IsEmpty())
183     {
184         rb_Selection->Enable();
185         rb_Selection->SetValue(true);
186     }
187     else
188         rb_CurrentFile->SetValue(true);
189 
190     ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("fortran_project"));
191 
192     cb_PROGafter->SetValue(cfg->ReadBool(_T("/indent_prog_fun_sub_after"), true));
193     cb_MODafter->SetValue(cfg->ReadBool(_T("/indent_module_after"), true));
194     cb_CONTMod->SetValue(cfg->ReadBool(_T("/indent_contains_module"), true));
195     cb_CONTModAfter->SetValue(cfg->ReadBool(_T("/indent_contains_module_after"), true));
196     cb_CONTProc->SetValue(cfg->ReadBool(_T("/indent_contains_procedure"), true));
197     cb_CONTProcAfter->SetValue(cfg->ReadBool(_T("/indent_contains_procedure_after"), true));
198     cb_CONTType->SetValue(cfg->ReadBool(_T("/indent_contains_typedef"), true));
199     cb_CONTTypeAfter->SetValue(cfg->ReadBool(_T("/indent_contains_typedef_after"), true));
200     cb_SELECTCASEafter->SetValue(cfg->ReadBool(_T("/indent_selectcase_after"), true));
201     cb_SELECTTYPEafter->SetValue(cfg->ReadBool(_T("/indent_selecttype_after"), true));
202 
203     cb_TrimLines->SetValue(cfg->ReadBool(_T("/indent_trim_right"), true));
204     bool sae = cfg->ReadBool(_T("/indent_same_as_editor"), true);
205     cb_TabAsEditor->SetValue(sae);
206     cb_UseTabs->SetValue(cfg->ReadBool(_T("/indent_use_tabs"), false));
207     spc_Spaces->SetValue(cfg->ReadInt(_T("/indent_tab_width"), 4));
208 
209     cb_UseTabs->Enable(!sae);
210     spc_Spaces->Enable(!sae);
211     stxt_TabSpaces->Enable(!sae);
212 }
213 
~FormatIndentDlg()214 FormatIndentDlg::~FormatIndentDlg()
215 {
216 	//(*Destroy(FormatIndentDlg)
217 	//*)
218 }
219 
OnOK(wxCommandEvent & event)220 void FormatIndentDlg::OnOK(wxCommandEvent& event)
221 {
222     ConfigManager* cfg = Manager::Get()->GetConfigManager(_T("fortran_project"));
223 
224     cfg->Write(_T("/indent_prog_fun_sub_after"), (bool)cb_PROGafter->GetValue());
225     cfg->Write(_T("/indent_module_after"), (bool)cb_MODafter->GetValue());
226     cfg->Write(_T("/indent_contains_module"), (bool)cb_CONTMod->GetValue());
227     cfg->Write(_T("/indent_contains_module_after"), (bool)cb_CONTModAfter->GetValue());
228     cfg->Write(_T("/indent_contains_procedure"), (bool)cb_CONTProc->GetValue());
229     cfg->Write(_T("/indent_contains_procedure_after"), (bool)cb_CONTProcAfter->GetValue());
230     cfg->Write(_T("/indent_contains_typedef"), (bool)cb_CONTType->GetValue());
231     cfg->Write(_T("/indent_contains_typedef_after"), (bool)cb_CONTTypeAfter->GetValue());
232     cfg->Write(_T("/indent_selectcase_after"), (bool)cb_SELECTCASEafter->GetValue());
233     cfg->Write(_T("/indent_selecttype_after"), (bool)cb_SELECTTYPEafter->GetValue());
234 
235     cfg->Write(_T("/indent_trim_right"), (bool)cb_TrimLines->GetValue());
236     cfg->Write(_T("/indent_same_as_editor"), (bool)cb_TabAsEditor->GetValue());
237     cfg->Write(_T("/indent_use_tabs"), (bool)cb_UseTabs->GetValue());
238     cfg->Write(_T("/indent_tab_width"), (int)spc_Spaces->GetValue());
239 
240     EndModal(wxID_OK);
241 }
242 
GetFormatScope()243 FormatIndentDlg::FormatIndentScope FormatIndentDlg::GetFormatScope()
244 {
245     FormatIndentScope  sc;
246     if (rb_ActiveProject->GetValue())
247         sc = fisProject;
248     else if (rb_CurrentFile->GetValue())
249         sc = fisCurrentFile;
250     else
251         sc = fisSelection;
252     return sc;
253 }
254 
255 
OnCbTabAsEditorClick(wxCommandEvent & event)256 void FormatIndentDlg::OnCbTabAsEditorClick(wxCommandEvent& event)
257 {
258     bool sae = cb_TabAsEditor->GetValue();
259     cb_UseTabs->Enable(!sae);
260     spc_Spaces->Enable(!sae);
261     stxt_TabSpaces->Enable(!sae);
262 }
263