172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_CREATE_APPLICATION_SHORTCUTS_DIALOG_GTK_H_ 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_CREATE_APPLICATION_SHORTCUTS_DIALOG_GTK_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/ref_counted.h" 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/extensions/image_loading_tracker.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/shell_integration.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/gtk/gtk_signal.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GdkPixbuf GdkPixbuf; 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkWidget GtkWidget; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkWindow GtkWindow; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass Extension; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TabContentsWrapper; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CreateApplicationShortcutsDialogGtk 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : public base::RefCountedThreadSafe<CreateApplicationShortcutsDialogGtk, 27731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::DeleteOnUIThread> { 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch protected: 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch explicit CreateApplicationShortcutsDialogGtk(GtkWindow* parent); 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~CreateApplicationShortcutsDialogGtk(); 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CHROMEGTK_CALLBACK_1(CreateApplicationShortcutsDialogGtk, void, 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnCreateDialogResponse, int); 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CHROMEGTK_CALLBACK_1(CreateApplicationShortcutsDialogGtk, void, 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnErrorDialogResponse, int); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CHROMEGTK_CALLBACK_0(CreateApplicationShortcutsDialogGtk, void, 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch OnToggleCheckbox); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void CreateDialogBox(GtkWindow* parent); 42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void CreateIconPixBuf(const SkBitmap& bitmap); 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // This method is called after a shortcut is created. 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Subclasses can override it to take some action at that time. 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void OnCreatedShortcut(void) {} 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void CreateDesktopShortcut( 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const ShellIntegration::ShortcutInfo& shortcut_info); 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ShowErrorDialog(); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch GtkWindow* parent_; 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // UI elements. 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* desktop_checkbox_; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* menu_checkbox_; 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ShortcutInfo for the new shortcut. 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ShellIntegration::ShortcutInfo shortcut_info_; 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Image associated with the site. 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GdkPixbuf* favicon_pixbuf_; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Dialog box that allows the user to create an application shortcut. 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* create_dialog_; 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Dialog box that shows the error message. 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* error_dialog_; 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 71dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen friend struct BrowserThread::DeleteOnThread<BrowserThread::UI>; 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch friend class DeleteTask<CreateApplicationShortcutsDialogGtk>; 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(CreateApplicationShortcutsDialogGtk); 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass CreateWebApplicationShortcutsDialogGtk 77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : public CreateApplicationShortcutsDialogGtk { 78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Displays the dialog box to create application shortcuts for |tab_contents|. 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static void Show(GtkWindow* parent, TabContentsWrapper* tab_contents); 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen CreateWebApplicationShortcutsDialogGtk(GtkWindow* parent, 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper* tab_contents); 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual ~CreateWebApplicationShortcutsDialogGtk() {} 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void OnCreatedShortcut(void); 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 90ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // TabContentsWrapper for which the shortcut will be created. 91ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabContentsWrapper* tab_contents_; 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CreateWebApplicationShortcutsDialogGtk); 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass CreateChromeApplicationShortcutsDialogGtk 97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : public CreateApplicationShortcutsDialogGtk, 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public ImageLoadingTracker::Observer { 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Displays the dialog box to create application shortcuts for |app|. 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch static void Show(GtkWindow* parent, const Extension* app); 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 103201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch explicit CreateChromeApplicationShortcutsDialogGtk(GtkWindow* parent, 104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const Extension* app); 105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual ~CreateChromeApplicationShortcutsDialogGtk() {} 106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Implement ImageLoadingTracker::Observer. |tracker_| is used to 108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // load the app's icon. This method recieves the icon, and adds 109201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // it to the "Create Shortcut" dailog box. 110201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void OnImageLoaded(SkBitmap* image, 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ExtensionResource& resource, 112201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int index); 113201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 114201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const Extension* app_; 116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ImageLoadingTracker tracker_; 117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DISALLOW_COPY_AND_ASSIGN(CreateChromeApplicationShortcutsDialogGtk); 118201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 119201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // CHROME_BROWSER_UI_GTK_CREATE_APPLICATION_SHORTCUTS_DIALOG_GTK_H_ 121