Skip to content

Commit

Permalink
Rewrite FindFrame without XRC
Browse files Browse the repository at this point in the history
  • Loading branch information
vslavik committed Feb 12, 2015
1 parent 73155d0 commit 629a387
Show file tree
Hide file tree
Showing 7 changed files with 80 additions and 183 deletions.
1 change: 0 additions & 1 deletion Poedit.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,6 @@
<SubType>Designer</SubType>
</None>
<None Include="src\resources\comment.xrc" />
<None Include="src\resources\find.xrc" />
<None Include="src\resources\manager.xrc" />
<None Include="src\resources\menus.xrc" />
<None Include="src\resources\prefs.xrc" />
Expand Down
3 changes: 0 additions & 3 deletions Poedit.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -268,9 +268,6 @@
<None Include="src\resources\comment.xrc">
<Filter>Data Files</Filter>
</None>
<None Include="src\resources\find.xrc">
<Filter>Data Files</Filter>
</None>
<None Include="src\resources\manager.xrc">
<Filter>Data Files</Filter>
</None>
Expand Down
4 changes: 0 additions & 4 deletions Poedit.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@
B28F1D0016F629D30018AF7E /* export_html.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B28F1CE216F629D30018AF7E /* export_html.cpp */; };
B28F1D0116F629D30018AF7E /* pl_evaluate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B28F1CE316F629D30018AF7E /* pl_evaluate.cpp */; };
B29AE89017103992008D1F8A /* comment.xrc in Resources */ = {isa = PBXBuildFile; fileRef = B27EB05D1709DA4A009C1328 /* comment.xrc */; };
B29AE89117103992008D1F8A /* find.xrc in Resources */ = {isa = PBXBuildFile; fileRef = B27EB05E1709DA4A009C1328 /* find.xrc */; };
B29AE89217103992008D1F8A /* manager.xrc in Resources */ = {isa = PBXBuildFile; fileRef = B27EB05F1709DA4A009C1328 /* manager.xrc */; };
B29AE89317103992008D1F8A /* menus.xrc in Resources */ = {isa = PBXBuildFile; fileRef = B27EB0601709DA4A009C1328 /* menus.xrc */; };
B29AE89417103992008D1F8A /* prefs.xrc in Resources */ = {isa = PBXBuildFile; fileRef = B27EB0611709DA4A009C1328 /* prefs.xrc */; };
Expand Down Expand Up @@ -297,7 +296,6 @@
B27D1FD419EFFAD600AB1913 /* uz */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uz; path = uz.lproj/MoveApplication.strings; sourceTree = "<group>"; };
B27D1FD519EFFADE00AB1913 /* zh_Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = zh_Hant; path = zh_Hant.lproj/MoveApplication.strings; sourceTree = "<group>"; };
B27EB05D1709DA4A009C1328 /* comment.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = comment.xrc; sourceTree = "<group>"; };
B27EB05E1709DA4A009C1328 /* find.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = find.xrc; sourceTree = "<group>"; };
B27EB05F1709DA4A009C1328 /* manager.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = manager.xrc; sourceTree = "<group>"; };
B27EB0601709DA4A009C1328 /* menus.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = menus.xrc; sourceTree = "<group>"; };
B27EB0611709DA4A009C1328 /* prefs.xrc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = prefs.xrc; sourceTree = "<group>"; };
Expand Down Expand Up @@ -750,7 +748,6 @@
isa = PBXGroup;
children = (
B27EB05D1709DA4A009C1328 /* comment.xrc */,
B27EB05E1709DA4A009C1328 /* find.xrc */,
B27EB05F1709DA4A009C1328 /* manager.xrc */,
B27EB0601709DA4A009C1328 /* menus.xrc */,
B27EB0611709DA4A009C1328 /* prefs.xrc */,
Expand Down Expand Up @@ -1001,7 +998,6 @@
B29AE89017103992008D1F8A /* comment.xrc in Resources */,
B22A5C83184E4B870034BEFD /* edit-delete@2x.png in Resources */,
B22A5C88184E4B870034BEFD /* poedit-fuzzy@2x.png in Resources */,
B29AE89117103992008D1F8A /* find.xrc in Resources */,
B29B282119D2E87600D27DC8 /* sidebar@2x.png in Resources */,
B29AE89217103992008D1F8A /* manager.xrc in Resources */,
B29AE89317103992008D1F8A /* menus.xrc in Resources */,
Expand Down
1 change: 0 additions & 1 deletion src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ XRC_RESOURCES = \
$(srcdir)/resources/properties.xrc \
$(srcdir)/resources/summary.xrc \
$(srcdir)/resources/toolbar.xrc \
$(srcdir)/resources/find.xrc \
$(srcdir)/resources/comment.xrc \
$(srcdir)/resources/manager.xrc

Expand Down
126 changes: 74 additions & 52 deletions src/findframe.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,18 @@
*
*/

#include <wx/xrc/xmlres.h>
#include <wx/accel.h>
#include <wx/config.h>
#include <wx/button.h>
#include <wx/sizer.h>
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/checkbox.h>

#include "catalog.h"
#include "findframe.h"
#include "edlistctrl.h"
#include "findframe.h"
#include "hidpi.h"
#include "utility.h"

// The word separators used when doing a "Whole words only" search
Expand All @@ -42,36 +44,66 @@ static const wxString SEPARATORS = wxT(" \t\r\n\\/:;.,?!\"'_|-+=(){}[]<>&#@");
wxString FindFrame::ms_text;
FindFrame *FindFrame::ms_singleton = nullptr;

BEGIN_EVENT_TABLE(FindFrame, wxDialog)
EVT_BUTTON(XRCID("find_next"), FindFrame::OnNext)
EVT_BUTTON(XRCID("find_prev"), FindFrame::OnPrev)
EVT_BUTTON(wxID_CLOSE, FindFrame::OnClose)
EVT_TEXT(XRCID("string_to_find"), FindFrame::OnTextChange)
EVT_CHECKBOX(-1, FindFrame::OnCheckbox)
END_EVENT_TABLE()

FindFrame::FindFrame(wxWindow *parent,
PoeditListCtrl *list,
const CatalogPtr& c,
wxTextCtrl *textCtrlOrig,
wxTextCtrl *textCtrlTrans)
: m_listCtrl(list),
: wxDialog(parent, wxID_ANY, _("Find")),
m_listCtrl(list),
m_catalog(c),
m_position(-1),
m_textCtrlOrig(textCtrlOrig),
m_textCtrlTrans(textCtrlTrans)
{
wxXmlResource::Get()->LoadDialog(this, parent, "find_frame");
ms_singleton = this;

wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);

wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
topsizer->Add(sizer, wxSizerFlags(1).Expand().PXBorderAll());

sizer->Add(new wxStaticText(this, wxID_ANY, _("String to find:")), wxSizerFlags().Expand().PXBorder(wxLEFT|wxRIGHT|wxTOP));
m_textField = new wxTextCtrl(this, wxID_ANY, "", wxDefaultPosition, wxSize(PX(220), -1));
sizer->Add(m_textField, wxSizerFlags().Expand().PXBorderAll());

m_textField = XRCCTRL(*this, "string_to_find", wxTextCtrl);

m_caseSensitive = new wxCheckBox(this, wxID_ANY, _("Case sensitive"));
m_fromFirst = new wxCheckBox(this, wxID_ANY, _("Start from the first item"));
m_wholeWords = new wxCheckBox(this, wxID_ANY, _("Whole words only"));
m_findInOrig = new wxCheckBox(this, wxID_ANY, _("Find in original strings"));
m_findInTrans = new wxCheckBox(this, wxID_ANY, _("Find in translations"));
m_findInComments = new wxCheckBox(this, wxID_ANY, _("Find in comments"));
m_findInAutoComments = new wxCheckBox(this, wxID_ANY, _("Find in automatic comments"));

wxBoxSizer *options = new wxBoxSizer(wxVERTICAL);
options->Add(m_caseSensitive, wxSizerFlags().Expand());
options->Add(m_fromFirst, wxSizerFlags().Expand().Border(wxTOP, PX(2)));
options->Add(m_wholeWords, wxSizerFlags().Expand().Border(wxTOP, PX(2)));
options->Add(m_findInOrig, wxSizerFlags().Expand().Border(wxTOP, PX(2)));
options->Add(m_findInTrans, wxSizerFlags().Expand().Border(wxTOP, PX(2)));
options->Add(m_findInComments, wxSizerFlags().Expand().Border(wxTOP, PX(2)));
options->Add(m_findInAutoComments, wxSizerFlags().Expand().Border(wxTOP, PX(2)));
sizer->Add(options, wxSizerFlags().Expand().PXBorderAll());

m_btnClose = new wxButton(this, wxID_CLOSE, _("Close"));
m_btnPrev = new wxButton(this, wxID_ANY, _("< &Previous"));
m_btnNext = new wxButton(this, wxID_ANY, _("&Next >"));
m_btnNext->SetDefault();

wxBoxSizer *buttons = new wxBoxSizer(wxHORIZONTAL);
sizer->Add(buttons, wxSizerFlags().Expand().PXBorderAll());
buttons->Add(m_btnClose, wxSizerFlags().PXBorder(wxRIGHT));
buttons->AddStretchSpacer();
buttons->Add(m_btnPrev, wxSizerFlags().PXBorder(wxRIGHT));
buttons->Add(m_btnNext, wxSizerFlags());

SetSizerAndFit(topsizer);

SetEscapeId(wxID_CLOSE);

RestoreWindowState(this, wxDefaultSize, WinState_Pos);

m_btnNext = XRCCTRL(*this, "find_next", wxButton);
m_btnPrev = XRCCTRL(*this, "find_prev", wxButton);

if ( !ms_text.empty() )
{
m_textField->SetValue(ms_text);
Expand All @@ -80,20 +112,13 @@ FindFrame::FindFrame(wxWindow *parent,

Reset(c);

XRCCTRL(*this, "in_orig", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("find_in_orig", true));
XRCCTRL(*this, "in_trans", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("find_in_trans", true));
XRCCTRL(*this, "in_comments", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("find_in_comments", true));
XRCCTRL(*this, "in_auto_comments", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("find_in_auto_comments", true));
XRCCTRL(*this, "case_sensitive", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("find_case_sensitive", false));
XRCCTRL(*this, "from_first", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("find_from_first", true));
XRCCTRL(*this, "whole_words", wxCheckBox)->SetValue(
wxConfig::Get()->ReadBool("whole_words", false));
m_findInOrig->SetValue(wxConfig::Get()->ReadBool("find_in_orig", true));
m_findInTrans->SetValue(wxConfig::Get()->ReadBool("find_in_trans", true));
m_findInComments->SetValue(wxConfig::Get()->ReadBool("find_in_comments", true));
m_findInAutoComments->SetValue(wxConfig::Get()->ReadBool("find_in_auto_comments", true));
m_caseSensitive->SetValue(wxConfig::Get()->ReadBool("find_case_sensitive", false));
m_fromFirst->SetValue(wxConfig::Get()->ReadBool("find_from_first", true));
m_wholeWords->SetValue(wxConfig::Get()->ReadBool("whole_words", false));

#ifdef __WXOSX__
wxAcceleratorEntry entries[] = {
Expand All @@ -103,7 +128,11 @@ FindFrame::FindFrame(wxWindow *parent,
SetAcceleratorTable(accel);
#endif

ms_singleton = this;
m_textField->Bind(wxEVT_TEXT, &FindFrame::OnTextChange, this);
m_btnPrev->Bind(wxEVT_BUTTON, &FindFrame::OnPrev, this);
m_btnNext->Bind(wxEVT_BUTTON, &FindFrame::OnNext, this);
Bind(wxEVT_BUTTON, &FindFrame::OnClose, this, wxID_CLOSE);
Bind(wxEVT_CHECKBOX, &FindFrame::OnCheckbox, this);
}


Expand All @@ -113,20 +142,13 @@ FindFrame::~FindFrame()

SaveWindowState(this, WinState_Pos);

wxConfig::Get()->Write("find_in_orig",
XRCCTRL(*this, "in_orig", wxCheckBox)->GetValue());
wxConfig::Get()->Write("find_in_trans",
XRCCTRL(*this, "in_trans", wxCheckBox)->GetValue());
wxConfig::Get()->Write("find_in_comments",
XRCCTRL(*this, "in_comments", wxCheckBox)->GetValue());
wxConfig::Get()->Write("find_in_auto_comments",
XRCCTRL(*this, "in_auto_comments", wxCheckBox)->GetValue());
wxConfig::Get()->Write("find_case_sensitive",
XRCCTRL(*this, "case_sensitive", wxCheckBox)->GetValue());
wxConfig::Get()->Write("find_from_first",
XRCCTRL(*this, "from_first", wxCheckBox)->GetValue());
wxConfig::Get()->Write("whole_words",
XRCCTRL(*this, "whole_words", wxCheckBox)->GetValue());
wxConfig::Get()->Write("find_in_orig", m_findInOrig->GetValue());
wxConfig::Get()->Write("find_in_trans", m_findInTrans->GetValue());
wxConfig::Get()->Write("find_in_comments", m_findInComments->GetValue());
wxConfig::Get()->Write("find_in_auto_comments", m_findInAutoComments->GetValue());
wxConfig::Get()->Write("find_case_sensitive", m_caseSensitive->GetValue());
wxConfig::Get()->Write("find_from_first", m_fromFirst->GetValue());
wxConfig::Get()->Write("whole_words", m_wholeWords->GetValue());
}

FindFrame *FindFrame::Get(PoeditListCtrl *list, const CatalogPtr& forCatalog)
Expand Down Expand Up @@ -160,7 +182,7 @@ void FindFrame::Reset(const CatalogPtr& c)
if (!m_listCtrl)
return;

bool fromFirst = XRCCTRL(*this, "from_first", wxCheckBox)->GetValue();
bool fromFirst = m_fromFirst->GetValue();

m_catalog = c;
m_position = -1;
Expand Down Expand Up @@ -273,12 +295,12 @@ bool FindFrame::DoFind(int dir)
return false;

int cnt = m_listCtrl->GetItemCount();
bool inStr = XRCCTRL(*this, "in_orig", wxCheckBox)->GetValue();
bool inTrans = XRCCTRL(*this, "in_trans", wxCheckBox)->GetValue();
bool inComments = XRCCTRL(*this, "in_comments", wxCheckBox)->GetValue();
bool inExtractedComments = XRCCTRL(*this, "in_auto_comments", wxCheckBox)->GetValue();
bool caseSens = XRCCTRL(*this, "case_sensitive", wxCheckBox)->GetValue();
bool wholeWords = XRCCTRL(*this, "whole_words", wxCheckBox)->GetValue();
bool inStr = m_findInOrig->GetValue();
bool inTrans = m_findInTrans->GetValue();
bool inComments = m_findInComments->GetValue();
bool inExtractedComments = m_findInAutoComments->GetValue();
bool caseSens = m_caseSensitive->GetValue();
bool wholeWords = m_wholeWords->GetValue();
int posOrig = m_position;

FoundState found = Found_Not;
Expand Down
8 changes: 6 additions & 2 deletions src/findframe.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
#include <wx/weakref.h>

class WXDLLIMPEXP_FWD_CORE wxButton;
class WXDLLIMPEXP_FWD_CORE wxCheckBox;
class WXDLLIMPEXP_FWD_CORE wxTextCtrl;

class Catalog;

Expand Down Expand Up @@ -78,14 +80,16 @@ class FindFrame : public wxDialog
void OnTextChange(wxCommandEvent &event);
void OnCheckbox(wxCommandEvent &event);
bool DoFind(int dir);
DECLARE_EVENT_TABLE()

wxTextCtrl *m_textField;
wxCheckBox *m_caseSensitive, *m_fromFirst, *m_wholeWords,
*m_findInOrig, *m_findInTrans, *m_findInComments,
*m_findInAutoComments;

wxWeakRef<PoeditListCtrl> m_listCtrl;
CatalogPtr m_catalog;
int m_position;
wxButton *m_btnPrev, *m_btnNext;
wxButton *m_btnClose, *m_btnPrev, *m_btnNext;
wxTextCtrl *m_textCtrlOrig, *m_textCtrlTrans;

// NB: this is static so that last search term is remembered
Expand Down
Loading

0 comments on commit 629a387

Please sign in to comment.