1 /* Copyright (c) 2006, Nokia Corporation
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * * Neither the name of the Nokia Corporation nor the names of its
14 * contributors may be used to endorse or promote products derived from
15 * this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 #endif /*HAVE_CONFIG_H*/
34 #include "modest-ui-dimming-rules.h"
35 #include "modest-tny-folder.h"
37 static gboolean _folder_is_any_of_type (TnyFolder *folder, TnyFolderType types[], guint ntypes);
38 static gboolean _invalid_msg_selected (ModestMainWindow *win, gboolean unique);
41 modest_ui_dimming_rules_on_new_folder (ModestWindow *win, gpointer user_data)
43 GtkWidget *folder_view = NULL;
44 TnyFolderStore *parent_folder = NULL;
45 ModestTnyFolderRules rules;
46 gboolean dimmed = FALSE;
48 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
51 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
52 MODEST_WIDGET_TYPE_FOLDER_VIEW);
53 /* If no folder view, always dimmed */
57 /* Get selected folder as parent of new folder to create */
58 parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
62 /* Check dimmed rule */
63 rules = modest_tny_folder_get_rules (TNY_FOLDER (parent_folder));
64 dimmed = rules & MODEST_FOLDER_RULES_FOLDER_NON_WRITEABLE;
67 g_object_unref (parent_folder);
73 modest_ui_dimming_rules_on_open_msg (ModestWindow *win, gpointer user_data)
75 gboolean dimmed = FALSE;
77 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
79 /* Check dimmed rule */
80 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), TRUE);
86 modest_ui_dimming_rules_on_reply_msg (ModestWindow *win, gpointer user_data)
88 GtkWidget *folder_view = NULL;
89 TnyFolderStore *current_folder = NULL;
90 gboolean local_folder = FALSE;
91 gboolean dimmed = FALSE;
92 TnyFolderType types[2];
94 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
97 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
98 MODEST_WIDGET_TYPE_FOLDER_VIEW);
99 /* If no folder view, always dimmed */
103 /* Get selected folder as parent of new folder to create */
104 current_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
108 if (TNY_IS_FOLDER(current_folder))
109 local_folder = modest_tny_folder_is_local_folder (TNY_FOLDER(current_folder));
110 types[0] = TNY_FOLDER_TYPE_DRAFTS;
111 types[1] = TNY_FOLDER_TYPE_OUTBOX;
113 /* Check dimmed rule */
115 dimmed = ((local_folder) &&
116 (_folder_is_any_of_type (TNY_FOLDER(current_folder), types, 2)));
119 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE);
122 g_object_unref (current_folder);
129 modest_ui_dimming_rules_on_contents_msg (ModestWindow *win, gpointer user_data)
131 gboolean dimmed = FALSE;
133 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
135 /* Check dimmed rule */
136 dimmed = _invalid_msg_selected (MODEST_MAIN_WINDOW(win), FALSE);
141 /* *********************** static utility functions ******************** */
144 _folder_is_any_of_type (TnyFolder *folder,
145 TnyFolderType types[],
148 TnyFolderType folder_type;
149 gboolean result = FALSE;
152 g_return_val_if_fail (TNY_IS_FOLDER(folder), FALSE);
154 /* Get folder type */
155 if (modest_tny_folder_is_local_folder (folder))
156 folder_type = modest_tny_folder_get_local_folder_type (folder);
158 folder_type = modest_tny_folder_guess_folder_type (folder);
160 /* Check foler type */
161 for (i=0; i < ntypes; i++) {
162 result = result || folder_type == types[i];
171 _invalid_msg_selected (ModestMainWindow *win,
174 GtkWidget *header_view = NULL;
175 GtkWidget *folder_view = NULL;
176 TnyList *selected_headers = NULL;
177 gboolean result = FALSE;
179 g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
181 /* Get header view to check selected messages */
182 header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
183 MODEST_WIDGET_TYPE_HEADER_VIEW);
185 /* Get folder view to check focus */
186 folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
187 MODEST_WIDGET_TYPE_FOLDER_VIEW);
189 /* Get selected headers */
190 selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
192 /* Check dimmed rule (TODO: check focus on widgets */
193 result = ((selected_headers == NULL) ||
194 (GTK_WIDGET_HAS_FOCUS (folder_view)));
196 result = tny_list_get_length (selected_headers) > 1;
199 if (selected_headers != NULL)
200 g_object_unref (selected_headers);