// frmSearch.cpp - Search form.
//
-// (c) 2012-2015 Xestia Software Development.
+// (c) 2012-2017 Xestia Software Development.
//
// This file is part of Xestia Address Book.
//
#include <thread>
+#define SEARCHSETTINGS_MAX 15
+
DEFINE_EVENT_TYPE(SE_ADDSEARCHSETTING);
DEFINE_EVENT_TYPE(SE_REMOVESEARCHSETTING);
DEFINE_EVENT_TYPE(SE_RELOADACCOUNTS);
frmSearchADT( parent )
{
+ // Setup the application icon.
+
+ wxMemoryInputStream istream(bigimgs_searchicon_png, sizeof(bigimgs_searchicon_png));
+ wxImage bigimgs_searchiconi(istream, wxBITMAP_TYPE_PNG);
+ wxBitmap searchiconbmp(bigimgs_searchiconi, -1);
+ wxIcon searchicon;
+ searchicon.CopyFromBitmap(searchiconbmp);
+ this->SetIcon(searchicon);
+
+ // Setup the search window.
+
XABSearchPanel *InitPanel = new XABSearchPanel( tabSearch );
InitPanel->EnableButtons(TRUE, FALSE);
InitPanel->SetupPointers(this);
void frmSearch::SearchContacts( wxCommandEvent& event )
{
+ // Check if any accounts has been selected.
+
+ bool AccountsFound = false;
+
+ for (std::map<wxString, bool>::iterator saiter = SearchAccounts.begin();
+ saiter != SearchAccounts.end(); saiter++){
+
+ if (saiter->second == true){
+
+ AccountsFound = true;
+ break;
+
+ }
+
+ }
+
+ if (AccountsFound == false){
+
+ wxMessageBox(_("No accounts have been selected to search contacts for."),
+ _("No accounts selected"),
+ wxOK|wxICON_ERROR);
+ return;
+
+ }
+
// Change the button to stop.
if (StopMode == FALSE){
}
+ // Clear the status bar.
+
+ wxCommandEvent statusResetEvent (SE_SBUPDATE);
+
+ wxString *statusReset = new wxString(wxT(""));
+
+ statusResetEvent.SetClientData(statusReset);
+ wxPostEvent(this, statusResetEvent);
+
// Add a search settings with the default things.
ScrollGen = 0;
NewPanel->SetupPointers(this);
NewPanel->SetupInteger(ScrollGen);
szrSearch->Add(NewPanel, 1, wxEXPAND|wxGROW, 5);
- //szrSearch->Fit(tabSearch);
szrSearch->FitInside(tabSearch);
szrSearch->Layout();
szrSearch->RecalcSizes();
SearchFrames.insert(std::make_pair(ScrollGen, NewPanel));
ScrollGen++;
- // Check if number of search settings is 15 (or over).
+ // Check if number of search settings is SEARCHSETTINGS_MAX (or over).
// If it is, disable the option of adding extra settings
// for all frames until one is removed.
XABSearchPanel *XABSPPtr;
- if (SearchFrames.size() >= 15){
+ if (SearchFrames.size() >= SEARCHSETTINGS_MAX){
for (std::map<int,void*>::iterator iter = SearchFrames.begin();
iter != SearchFrames.end(); ++iter){
void frmSearch::RemoveSearchSetting( wxCommandEvent& event )
{
+ // Remove a search setting frame from the list.
+
// Get the integer from the event.
std::map<int,void*>::iterator iter;
iter = SearchFrames.find(event.GetInt());
- // Remove a search setting frame from the list.
-
XABSearchPanel *XABSPPtr;
XABSPPtr = static_cast<XABSearchPanel*>(iter->second);
delete XABSPPtr;
XABSPPtr = NULL;
- //szrSearch->Fit(tabSearch);
-
- if (SearchFrames.size() < 15 && SearchFrames.size() > 1){
+ if (SearchFrames.size() < SEARCHSETTINGS_MAX && SearchFrames.size() > 1){
for (std::map<int,void*>::iterator iter = SearchFrames.begin();
iter != SearchFrames.end(); ++iter){
}
void frmSearch::SearchBarUpdate( wxCommandEvent& event ){
-
+
+ // Update the status bar.
+
wxString *SBData = (wxString*)event.GetClientData();
stbBottom->SetStatusText(*SBData, 0);
void frmSearch::SearchFinished( wxCommandEvent& event ){
+ // Reset the search button and unlock the search
+ // panel buttons.
+
StopMode = FALSE;
btnSearch->SetLabel(_("Search"));
DisableAllSearchSettings(FALSE);
void frmSearch::DisableAllSearchSettings(bool Enable){
+ // Check if there is only one search value. If there is, only enable
+ // the add button if this is the case.
+
+ if (SearchFrames.size() == 1){
+
+ XABSearchPanel *XABSPPtr = static_cast<XABSearchPanel*>(SearchFrames.begin()->second);
+ XABSPPtr->EnableButtons(TRUE, FALSE);
+ return;
+
+ }
+
+ // Check if there is SEARCHSETTINGS_MAX controls set or more, only
+ // enable the remove button if this is the case.
+
+ if (SearchFrames.size() >= SEARCHSETTINGS_MAX){
+
+ for (std::map<int, void*>::iterator siter = SearchFrames.begin();
+ siter != SearchFrames.end(); siter++){
+
+ XABSearchPanel *XABSPPtr = static_cast<XABSearchPanel*>(SearchFrames.begin()->second);
+ XABSPPtr->EnableButtons(FALSE, TRUE);
+
+ }
+ return;
+
+ }
+
+ // More than one control, so process them.
+
for (std::map<int, void*>::iterator siter = SearchFrames.begin();
siter != SearchFrames.end(); siter++){
// Close window.
- WindowData *WData = new WindowData;
+ if (SearchMode == false){
+
+ WindowData *WData = new WindowData;
- WData->DataType = 2;
- WData->WindowPointer = this;
- WData->WindowID = SearchUID;
+ WData->DataType = 2;
+ WData->WindowPointer = this;
+ WData->WindowID = SearchUID;
- wxCommandEvent delevent(WINDOW_CLOSE);
- delevent.SetClientData(WData);
- wxPostEvent(GetParent(), delevent);
+ wxCommandEvent delevent(WINDOW_CLOSE);
+ delevent.SetClientData(WData);
+ wxPostEvent(GetParent(), delevent);
- wxCommandEvent rs(CE_REMOVESEARCH);
- wxPostEvent(this, rs);
+ wxCommandEvent rs(CE_REMOVESEARCH);
+ wxPostEvent(this, rs);
- WData = NULL;
+ WData = NULL;
+
+ }
this->Destroy();
void frmSearch::CloseWindow( wxCommandEvent& event ){
+ // Close this window.
+
this->Close();
}
void frmSearch::SetUID(int UID){
+ // Set the UID of the search window.
+
SearchUID = UID;
}
void frmSearch::SetSearchMode(bool SearchModeIn){
+ // Set the search mode of the window.
+
SearchMode = SearchModeIn;
if (SearchMode == TRUE){