source: filezilla/trunk/fuentes/src/interface/settings/optionspage_filetype.cpp @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 3 years ago

First release to xenial

File size: 4.5 KB
Line 
1#include <filezilla.h>
2#include "../Options.h"
3#include "settingsdialog.h"
4#include "optionspage.h"
5#include "optionspage_filetype.h"
6
7BEGIN_EVENT_TABLE(COptionsPageFiletype, COptionsPage)
8EVT_BUTTON(XRCID("ID_ADD"), COptionsPageFiletype::OnAdd)
9EVT_BUTTON(XRCID("ID_REMOVE"), COptionsPageFiletype::OnRemove)
10EVT_TEXT(XRCID("ID_EXTENSION"), COptionsPageFiletype::OnTextChanged)
11EVT_LIST_ITEM_SELECTED(XRCID("ID_EXTENSIONS"), COptionsPageFiletype::OnSelChanged)
12EVT_LIST_ITEM_DESELECTED(XRCID("ID_EXTENSIONS"), COptionsPageFiletype::OnSelChanged)
13END_EVENT_TABLE()
14
15bool COptionsPageFiletype::LoadPage()
16{
17        bool failure = false;
18
19        SetCheckFromOption(XRCID("ID_ASCIIWITHOUT"), OPTION_ASCIINOEXT, failure);
20        SetCheckFromOption(XRCID("ID_ASCIIDOTFILE"), OPTION_ASCIIDOTFILE, failure);
21
22        if (failure)
23                return false;
24
25        if (!FindWindow(XRCID("ID_EXTENSION")) || !FindWindow(XRCID("ID_ADD")) ||
26                !FindWindow(XRCID("ID_REMOVE")) || !FindWindow(XRCID("ID_EXTENSIONS")) ||
27                !FindWindow(XRCID("ID_TYPE_AUTO")) || !FindWindow(XRCID("ID_TYPE_ASCII")) ||
28                !FindWindow(XRCID("ID_TYPE_BINARY")))
29                return false;
30
31        int mode = m_pOptions->GetOptionVal(OPTION_ASCIIBINARY);
32        if (mode == 1)
33                SetRCheck(XRCID("ID_TYPE_ASCII"), true, failure);
34        else if (mode == 2)
35                SetRCheck(XRCID("ID_TYPE_BINARY"), true, failure);
36        else
37                SetRCheck(XRCID("ID_TYPE_AUTO"), true, failure);
38
39        wxListCtrl* pListCtrl = XRCCTRL(*this, "ID_EXTENSIONS", wxListCtrl);
40        pListCtrl->ClearAll();
41        pListCtrl->InsertColumn(0, wxString());
42
43        wxString extensions = m_pOptions->GetOption(OPTION_ASCIIFILES);
44        wxString ext;
45        int pos = extensions.Find(_T("|"));
46        while (pos != -1) {
47                if (!pos) {
48                        if (!ext.empty()) {
49                                ext.Replace(_T("\\\\"), _T("\\"));
50                                pListCtrl->InsertItem(pListCtrl->GetItemCount(), ext);
51                                ext.clear();
52                        }
53                }
54                else if (extensions.c_str()[pos - 1] != '\\') {
55                        ext += extensions.Left(pos);
56                        ext.Replace(_T("\\\\"), _T("\\"));
57                        pListCtrl->InsertItem(pListCtrl->GetItemCount(), ext);
58                        ext.clear();
59                }
60                else {
61                        ext += extensions.Left(pos - 1) + _T("|");
62                }
63                extensions = extensions.Mid(pos + 1);
64                pos = extensions.Find(_T("|"));
65        }
66        ext += extensions;
67        ext.Replace(_T("\\\\"), _T("\\"));
68        pListCtrl->InsertItem(pListCtrl->GetItemCount(), ext);
69
70        SetCtrlState();
71
72        return true;
73}
74
75bool COptionsPageFiletype::SavePage()
76{
77        SetOptionFromCheck(XRCID("ID_ASCIIWITHOUT"), OPTION_ASCIINOEXT);
78        SetOptionFromCheck(XRCID("ID_ASCIIDOTFILE"), OPTION_ASCIIDOTFILE);
79
80        int mode;
81        if (GetRCheck(XRCID("ID_TYPE_ASCII")))
82                mode = 1;
83        else if (GetRCheck(XRCID("ID_TYPE_BINARY")))
84                mode = 2;
85        else
86                mode = 0;
87        m_pOptions->SetOption(OPTION_ASCIIBINARY, mode);
88
89        const wxListCtrl* pListCtrl = XRCCTRL(*this, "ID_EXTENSIONS", wxListCtrl);
90        wxASSERT(pListCtrl);
91
92        wxString extensions;
93
94        for (int i = 0; i < pListCtrl->GetItemCount(); i++) {
95                wxString ext = pListCtrl->GetItemText(i);
96                ext.Replace(_T("\\"), _T("\\\\"));
97                ext.Replace(_T("|"), _T("\\|"));
98                if (!extensions.empty())
99                        extensions += _T("|");
100                extensions += ext;
101        }
102        m_pOptions->SetOption(OPTION_ASCIIFILES, extensions);
103
104        return true;
105}
106
107bool COptionsPageFiletype::Validate()
108{
109        return true;
110}
111
112void COptionsPageFiletype::SetCtrlState()
113{
114        wxListCtrl* pListCtrl = XRCCTRL(*this, "ID_EXTENSIONS", wxListCtrl);
115        wxASSERT(pListCtrl);
116        pListCtrl->SetColumnWidth(0, wxLIST_AUTOSIZE);
117
118        FindWindow(XRCID("ID_REMOVE"))->Enable(pListCtrl->GetSelectedItemCount() != 0);
119        FindWindow(XRCID("ID_ADD"))->Enable( !GetText(XRCID("ID_EXTENSION")).empty() );
120}
121
122void COptionsPageFiletype::OnRemove(wxCommandEvent& event)
123{
124        wxListCtrl* pListCtrl = XRCCTRL(*this, "ID_EXTENSIONS", wxListCtrl);
125        wxASSERT(pListCtrl);
126
127        int item = -1;
128        item = pListCtrl->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
129        while (item != -1)
130        {
131                pListCtrl->DeleteItem(item);
132                item = pListCtrl->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
133        }
134        SetCtrlState();
135}
136
137void COptionsPageFiletype::OnAdd(wxCommandEvent& event)
138{
139        wxString ext = GetText(XRCID("ID_EXTENSION"));
140        if (ext.empty())
141        {
142                wxBell();
143                return;
144        }
145
146        wxListCtrl* pListCtrl = XRCCTRL(*this, "ID_EXTENSIONS", wxListCtrl);
147        wxASSERT(pListCtrl);
148
149        for (int i = 0; i < pListCtrl->GetItemCount(); i++)
150        {
151                wxString text = pListCtrl->GetItemText(i);
152                if (text == ext)
153                {
154                        DisplayError(0, wxString::Format(_("The extension '%s' does already exist in the list"), ext));
155                        return;
156                }
157        }
158
159        pListCtrl->InsertItem(pListCtrl->GetItemCount(), ext);
160
161        SetCtrlState();
162}
163
164void COptionsPageFiletype::OnTextChanged(wxCommandEvent& event)
165{
166        SetCtrlState();
167}
168
169void COptionsPageFiletype::OnSelChanged(wxListEvent& event)
170{
171        SetCtrlState();
172}
Note: See TracBrowser for help on using the repository browser.