Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Right click menu support added for the contact list and search results.
[xestiaab/.git] / source / widgets / XABContactMenu.cpp
1 #include "XABContactMenu.h"
2 #include "../frmMain.h"
3 #include "../frmSearch.h"
5 enum {
6         ID_CONTACTMENU_OPEN,
7         ID_CONTACTMENU_NEW,
8         ID_CONTACTMENU_EDIT,
9         ID_CONTACTMENU_DELETE,
10         ID_CONTACTMENU_REFRESHAB,
11         ID_CONTACTMENU_REVEAL
12 };
14 XABContactMenu::XABContactMenu(int MenuTypeIn){
16         MenuType = MenuTypeIn;
18         // Setup the menu items.
19         
20         AppendMenuItem(wxT("opencontact"), _("Open Contact..."), _(""), ID_CONTACTMENU_OPEN, wxITEM_NORMAL);
21         AppendMenuItem(wxT("sep1"), _(""), _(""), wxID_ANY, wxITEM_SEPARATOR);
22         
23         if (MenuType == XABCONTACTMENU_MAIN){
24         
25                 // Setup up the add contact option if in the main window.
27                 AppendMenuItem(wxT("newcontact"), _("New Contact..."), _(""), ID_CONTACTMENU_NEW, wxITEM_NORMAL);
28         
29         }
30         
31         AppendMenuItem(wxT("editcontact"), _("Edit Contact..."), _(""), ID_CONTACTMENU_EDIT, wxITEM_NORMAL);
33         if (MenuType == XABCONTACTMENU_SEARCH){
34         
35                 // Setup up the reveal contact option if in the search window.
36         
37                 AppendMenuItem(wxT("revealcontact"), _("Reveal Contact..."), _(""), ID_CONTACTMENU_REVEAL, wxITEM_NORMAL);
38         
39         }
40         
41         if (MenuType == XABCONTACTMENU_MAIN){
42         
43                 // Setup the delete and refresh contact options if in the main window.
44         
45                 AppendMenuItem(wxT("deletecontact"), _("Delete Contact..."), _(""), ID_CONTACTMENU_DELETE, wxITEM_NORMAL);
46                 AppendMenuItem(wxT("sep2"), _(""), _(""), wxID_ANY, wxITEM_SEPARATOR);
47                 AppendMenuItem(wxT("refreshab"), _("Refresh Address Book"), _(""), ID_CONTACTMENU_REFRESHAB, wxITEM_NORMAL);
48         
49         }
51 }
53 XABContactMenu::~XABContactMenu(){
55         // Delete the menu items.
56         
57         for (std::map<std::string, wxMenuItem*>::iterator MenuItemIter = MenuItems.begin(); 
58                 MenuItemIter != MenuItems.end(); ++MenuItemIter){
59         
60                 // Delete the wxMenuItem object.
61                 
62                 this->Disconnect(MenuItemIter->second->GetId(), wxEVT_COMMAND_MENU_SELECTED, 
63                         wxCommandEventHandler(XABContactMenu::ProcessMenuItemClick) );
64                 delete(MenuItemIter->second);
65                 MenuItemIter->second = NULL;
66         
67         }
68         
69         MenuItems.clear();
70         
71 }
73 void XABContactMenu::AppendMenuItem(wxString ObjectName, 
74         wxString MenuName, 
75         wxString MenuDescription,
76         int ItemID,
77         wxItemKind ItemType){
78         
79         wxMenuItem *menuitem = new wxMenuItem(
80                 NULL,
81                 ItemID,
82                 MenuName,
83                 MenuDescription,
84                 ItemType,
85                 NULL
86         );
87         
88         this->Connect(menuitem->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(XABContactMenu::ProcessMenuItemClick));
89         this->Append(menuitem);
90         MenuItems.insert(std::make_pair(ObjectName.ToStdString(), menuitem));
92 }
94 void XABContactMenu::SetupPointers(wxWindow* WindowPtrIn,
95         wxListCtrl* ContactListCtrlIn){
97         WindowPtr = WindowPtrIn;
98         ContactListCtrl = ContactListCtrlIn;
102 void XABContactMenu::SetupPointers(wxWindow* WindowPtrIn,
103         wxListCtrl* ContactListCtrlIn, 
104         bool EnableAccountSettingsIn){
106         WindowPtr = WindowPtrIn;
107         ContactListCtrl = ContactListCtrlIn;
108         EnableAccountSettings = EnableAccountSettingsIn;
112 wxMenu* XABContactMenu::MenuPointer(){
114         // Check for the following before passing the pointer:
115         // If an account has been selected.
116         // - Disable Refresh Address Book if not.
117         // If one or more contacts have been selected.
118         // - Disable New, Edit, Delete and Reveal contact as needed.
120         bool ContactSelected = FALSE;
121         long ItemIndex = -1;
122         int ContactCount = 0;
123         
124         for (;;){
125         
126                 ItemIndex = ContactListCtrl->GetNextItem(ItemIndex,
127                                                wxLIST_NEXT_ALL,
128                                                wxLIST_STATE_SELECTED);
129         
130                 if (ItemIndex == -1){
131             
132                     break;
133             
134                 }
135         
136                 ContactSelected = TRUE;
137                 break;
138         
139         }
141         if (MenuType == XABCONTACTMENU_MAIN){
142         
143                 std::map<std::string, wxMenuItem*>::iterator MenuItemIter = MenuItems.find("refreshab");
144                 
145                 if (EnableAccountSettings == FALSE){
146                         MenuItemIter->second->Enable(FALSE);
147                         MenuItemIter = MenuItems.find("newcontact");
148                         MenuItemIter->second->Enable(FALSE);
149                 }
150                 
151                 MenuItemIter = MenuItems.find("opencontact");
152                 MenuItemIter->second->Enable(ContactSelected);
153                 MenuItemIter = MenuItems.find("editcontact");
154                 MenuItemIter->second->Enable(ContactSelected);
155                 MenuItemIter = MenuItems.find("deletecontact");
156                 MenuItemIter->second->Enable(ContactSelected);
157         
158         } else if (MenuType == XABCONTACTMENU_SEARCH){
159         
160                 std::map<std::string, wxMenuItem*>::iterator MenuItemIter = MenuItems.find("opencontact");
161                 MenuItemIter->second->Enable(ContactSelected);
162                 MenuItemIter = MenuItems.find("editcontact");
163                 MenuItemIter->second->Enable(ContactSelected);
164                 MenuItemIter = MenuItems.find("revealcontact");
165                 MenuItemIter->second->Enable(ContactSelected);
166         
167         }
169         return this;
173 void XABContactMenu::ProcessMenuItemClick( wxCommandEvent& event){
175         int ItemID = event.GetId();
176         
177         if (MenuType == XABCONTACTMENU_MAIN){
178         
179                 switch (ItemID){
180                 
181                         case ID_CONTACTMENU_OPEN:
182                                 {
183                                         wxCommandEvent rcevent(CE_OPENCONTACTLIST);
184                                         wxPostEvent(WindowPtr, rcevent);
185                                 }
186                                 break;
187                         case ID_CONTACTMENU_NEW:
188                                 {
189                                         wxCommandEvent rcevent(CE_NEWCONTACT);
190                                         wxPostEvent(WindowPtr, rcevent);
191                                 }
192                                 break;
193                         case ID_CONTACTMENU_EDIT:
194                                 {
195                                         wxCommandEvent rcevent(CE_EDITCONTACT);
196                                         wxPostEvent(WindowPtr, rcevent);
197                                 }
198                                 break;
199                         case ID_CONTACTMENU_DELETE:
200                                 {
201                                         wxCommandEvent rcevent(CE_DELETECONTACT);
202                                         wxPostEvent(WindowPtr, rcevent);
203                                 }
204                                 break;
205                         case ID_CONTACTMENU_REFRESHAB:
206                                 {
207                                         wxCommandEvent rcevent(REFRESHADDRESSBOOK);
208                                         wxPostEvent(WindowPtr, rcevent);
209                                 }
210                                 break;
211                                 
212                 }
213                 
214         } else if (MenuType == XABCONTACTMENU_SEARCH){
215         
216                 switch (ItemID){
217                 
218                         case ID_CONTACTMENU_OPEN:
219                                 {
220                                         wxCommandEvent rcevent(SE_OPENCONTACT);
221                                         wxPostEvent(WindowPtr, rcevent);
222                                 }
223                                 break;
224                         case ID_CONTACTMENU_EDIT:
225                                 {
226                                         wxCommandEvent rcevent(SE_EDITCONTACT);
227                                         wxPostEvent(WindowPtr, rcevent);
228                                 }
229                                 break;
230                         case ID_CONTACTMENU_REVEAL:
231                                 {
232                                         wxCommandEvent rcevent(SE_REVEALCONTACT);
233                                         wxPostEvent(WindowPtr, rcevent);
234                                 }
235                                 break;
236                                 
237                 }
238         
239         }
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