Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
frmSearch: Event posting shouldn't happen when in search mode.
[xestiaab/.git] / source / search / frmSearch.cpp
index 23b32b6..9e4d8aa 100644 (file)
@@ -26,6 +26,8 @@
 
 #include <thread>
 
+#define SEARCHSETTINGS_MAX 15
+
 DEFINE_EVENT_TYPE(SE_ADDSEARCHSETTING);
 DEFINE_EVENT_TYPE(SE_REMOVESEARCHSETTING);
 DEFINE_EVENT_TYPE(SE_RELOADACCOUNTS);
@@ -57,6 +59,8 @@ frmSearch::frmSearch( wxWindow* parent )
 frmSearchADT( parent )
 {
        
+       // Setup the search window.
+       
        XABSearchPanel *InitPanel = new XABSearchPanel( tabSearch );
        InitPanel->EnableButtons(TRUE, FALSE);
        InitPanel->SetupPointers(this);
@@ -253,7 +257,6 @@ void frmSearch::AddSearchSetting( wxCommandEvent& event )
        NewPanel->SetupPointers(this);
        NewPanel->SetupInteger(ScrollGen);
        szrSearch->Add(NewPanel, 1, wxEXPAND|wxGROW, 5);
-       //szrSearch->Fit(tabSearch);
        szrSearch->FitInside(tabSearch);
        szrSearch->Layout();
        szrSearch->RecalcSizes();
@@ -261,13 +264,13 @@ void frmSearch::AddSearchSetting( wxCommandEvent& event )
        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){
@@ -300,13 +303,13 @@ void frmSearch::AddSearchSetting( wxCommandEvent& event )
 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);
        
@@ -319,9 +322,7 @@ void frmSearch::RemoveSearchSetting( wxCommandEvent& event )
        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){
@@ -359,7 +360,9 @@ void frmSearch::ReloadAccountList( wxCommandEvent& event ){
 }
 
 void frmSearch::SearchBarUpdate( wxCommandEvent& event ){
-
+       
+       // Update the status bar.
+       
        wxString *SBData = (wxString*)event.GetClientData();
 
        stbBottom->SetStatusText(*SBData, 0);
@@ -371,6 +374,9 @@ void frmSearch::SearchBarUpdate( wxCommandEvent& event ){
 
 void frmSearch::SearchFinished( wxCommandEvent& event ){
 
+       // Reset the search button and unlock the search
+       // panel buttons.
+       
        StopMode = FALSE;
        btnSearch->SetLabel(_("Search"));
        DisableAllSearchSettings(FALSE);
@@ -379,6 +385,35 @@ void frmSearch::SearchFinished( wxCommandEvent& event ){
 
 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++){
        
@@ -428,20 +463,24 @@ void frmSearch::CloseWindow( wxCloseEvent& event ){
        
        // 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();
 
@@ -449,18 +488,24 @@ void frmSearch::CloseWindow( wxCloseEvent& event ){
 
 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){
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy