+#include "XABContactMenu.h"
+#include "../frmMain.h"
+#include "../frmSearch.h"
+
+enum {
+ ID_CONTACTMENU_OPEN,
+ ID_CONTACTMENU_NEW,
+ ID_CONTACTMENU_EDIT,
+ ID_CONTACTMENU_DELETE,
+ ID_CONTACTMENU_REFRESHAB,
+ ID_CONTACTMENU_REVEAL
+};
+
+XABContactMenu::XABContactMenu(int MenuTypeIn){
+
+ MenuType = MenuTypeIn;
+
+ // Setup the menu items.
+
+ AppendMenuItem(wxT("opencontact"), _("Open Contact..."), _(""), ID_CONTACTMENU_OPEN, wxITEM_NORMAL);
+ AppendMenuItem(wxT("sep1"), _(""), _(""), wxID_ANY, wxITEM_SEPARATOR);
+
+ if (MenuType == XABCONTACTMENU_MAIN){
+
+ // Setup up the add contact option if in the main window.
+
+ AppendMenuItem(wxT("newcontact"), _("New Contact..."), _(""), ID_CONTACTMENU_NEW, wxITEM_NORMAL);
+
+ }
+
+ AppendMenuItem(wxT("editcontact"), _("Edit Contact..."), _(""), ID_CONTACTMENU_EDIT, wxITEM_NORMAL);
+
+ if (MenuType == XABCONTACTMENU_SEARCH){
+
+ // Setup up the reveal contact option if in the search window.
+
+ AppendMenuItem(wxT("revealcontact"), _("Reveal Contact..."), _(""), ID_CONTACTMENU_REVEAL, wxITEM_NORMAL);
+
+ }
+
+ if (MenuType == XABCONTACTMENU_MAIN){
+
+ // Setup the delete and refresh contact options if in the main window.
+
+ AppendMenuItem(wxT("deletecontact"), _("Delete Contact..."), _(""), ID_CONTACTMENU_DELETE, wxITEM_NORMAL);
+ AppendMenuItem(wxT("sep2"), _(""), _(""), wxID_ANY, wxITEM_SEPARATOR);
+ AppendMenuItem(wxT("refreshab"), _("Refresh Address Book"), _(""), ID_CONTACTMENU_REFRESHAB, wxITEM_NORMAL);
+
+ }
+
+}
+
+XABContactMenu::~XABContactMenu(){
+
+ // Delete the menu items.
+
+ for (std::map<std::string, wxMenuItem*>::iterator MenuItemIter = MenuItems.begin();
+ MenuItemIter != MenuItems.end(); ++MenuItemIter){
+
+ // Delete the wxMenuItem object.
+
+ this->Disconnect(MenuItemIter->second->GetId(), wxEVT_COMMAND_MENU_SELECTED,
+ wxCommandEventHandler(XABContactMenu::ProcessMenuItemClick) );
+ delete(MenuItemIter->second);
+ MenuItemIter->second = NULL;
+
+ }
+
+ MenuItems.clear();
+
+}
+
+void XABContactMenu::AppendMenuItem(wxString ObjectName,
+ wxString MenuName,
+ wxString MenuDescription,
+ int ItemID,
+ wxItemKind ItemType){
+
+ wxMenuItem *menuitem = new wxMenuItem(
+ NULL,
+ ItemID,
+ MenuName,
+ MenuDescription,
+ ItemType,
+ NULL
+ );
+
+ this->Connect(menuitem->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(XABContactMenu::ProcessMenuItemClick));
+ this->Append(menuitem);
+ MenuItems.insert(std::make_pair(ObjectName.ToStdString(), menuitem));
+
+}
+
+void XABContactMenu::SetupPointers(wxWindow* WindowPtrIn,
+ wxListCtrl* ContactListCtrlIn){
+
+ WindowPtr = WindowPtrIn;
+ ContactListCtrl = ContactListCtrlIn;
+
+}
+
+void XABContactMenu::SetupPointers(wxWindow* WindowPtrIn,
+ wxListCtrl* ContactListCtrlIn,
+ bool EnableAccountSettingsIn){
+
+ WindowPtr = WindowPtrIn;
+ ContactListCtrl = ContactListCtrlIn;
+ EnableAccountSettings = EnableAccountSettingsIn;
+
+}
+
+wxMenu* XABContactMenu::MenuPointer(){
+
+ // Check for the following before passing the pointer:
+ // If an account has been selected.
+ // - Disable Refresh Address Book if not.
+ // If one or more contacts have been selected.
+ // - Disable New, Edit, Delete and Reveal contact as needed.
+
+ bool ContactSelected = FALSE;
+ long ItemIndex = -1;
+ int ContactCount = 0;
+
+ for (;;){
+
+ ItemIndex = ContactListCtrl->GetNextItem(ItemIndex,
+ wxLIST_NEXT_ALL,
+ wxLIST_STATE_SELECTED);
+
+ if (ItemIndex == -1){
+
+ break;
+
+ }
+
+ ContactSelected = TRUE;
+ break;
+
+ }
+
+ if (MenuType == XABCONTACTMENU_MAIN){
+
+ std::map<std::string, wxMenuItem*>::iterator MenuItemIter = MenuItems.find("refreshab");
+
+ if (EnableAccountSettings == FALSE){
+ MenuItemIter->second->Enable(FALSE);
+ MenuItemIter = MenuItems.find("newcontact");
+ MenuItemIter->second->Enable(FALSE);
+ }
+
+ MenuItemIter = MenuItems.find("opencontact");
+ MenuItemIter->second->Enable(ContactSelected);
+ MenuItemIter = MenuItems.find("editcontact");
+ MenuItemIter->second->Enable(ContactSelected);
+ MenuItemIter = MenuItems.find("deletecontact");
+ MenuItemIter->second->Enable(ContactSelected);
+
+ } else if (MenuType == XABCONTACTMENU_SEARCH){
+
+ std::map<std::string, wxMenuItem*>::iterator MenuItemIter = MenuItems.find("opencontact");
+ MenuItemIter->second->Enable(ContactSelected);
+ MenuItemIter = MenuItems.find("editcontact");
+ MenuItemIter->second->Enable(ContactSelected);
+ MenuItemIter = MenuItems.find("revealcontact");
+ MenuItemIter->second->Enable(ContactSelected);
+
+ }
+
+ return this;
+
+}
+
+void XABContactMenu::ProcessMenuItemClick( wxCommandEvent& event){
+
+ int ItemID = event.GetId();
+
+ if (MenuType == XABCONTACTMENU_MAIN){
+
+ switch (ItemID){
+
+ case ID_CONTACTMENU_OPEN:
+ {
+ wxCommandEvent rcevent(CE_OPENCONTACTLIST);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+ case ID_CONTACTMENU_NEW:
+ {
+ wxCommandEvent rcevent(CE_NEWCONTACT);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+ case ID_CONTACTMENU_EDIT:
+ {
+ wxCommandEvent rcevent(CE_EDITCONTACT);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+ case ID_CONTACTMENU_DELETE:
+ {
+ wxCommandEvent rcevent(CE_DELETECONTACT);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+ case ID_CONTACTMENU_REFRESHAB:
+ {
+ wxCommandEvent rcevent(REFRESHADDRESSBOOK);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+
+ }
+
+ } else if (MenuType == XABCONTACTMENU_SEARCH){
+
+ switch (ItemID){
+
+ case ID_CONTACTMENU_OPEN:
+ {
+ wxCommandEvent rcevent(SE_OPENCONTACT);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+ case ID_CONTACTMENU_EDIT:
+ {
+ wxCommandEvent rcevent(SE_EDITCONTACT);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+ case ID_CONTACTMENU_REVEAL:
+ {
+ wxCommandEvent rcevent(SE_REVEALCONTACT);
+ wxPostEvent(WindowPtr, rcevent);
+ }
+ break;
+
+ }
+
+ }
+
+}
\ No newline at end of file