// Copyright 2008, Google Inc. // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following disclaimer // in the documentation and/or other materials provided with the // distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef CHROME_BROWSER_WIZARD_WIZARD_STEP_H #define CHROME_BROWSER_WIZARD_WIZARD_STEP_H #include #include namespace ChromeViews { class View; } class Wizard; // A navigation descriptor allows wizard steps to describe custom navigation // buttons and offsets (how many step forward or backward). struct WizardNavigationDescriptor { public: WizardNavigationDescriptor() : custom_default_button_(false), default_offset_(0), custom_alternate_button_(false), alternate_offset_(0), can_cancel_(true) { } ~WizardNavigationDescriptor() {} // // Default button definition. // // true if the steps wants a custom default button. bool custom_default_button_; // Default button label or empty string to remove the button completely. std::wstring default_label_; // Positive or negative offset to the step that should become selected when // the default button is pressed. int default_offset_; // // Alternate button definition. // // true if the steps wants a custom alternate button. bool custom_alternate_button_; // Alternate button label or empty string to remove the button completelty. // This button is typically used for "previous" std::wstring alternate_label_; // Positive or negative offset to the step that should become selected // when the alternate button is pressed. int alternate_offset_; // Whether the step features a cancel button. bool can_cancel_; private: DISALLOW_EVIL_CONSTRUCTORS(WizardNavigationDescriptor); }; //////////////////////////////////////////////////////////////////////////////// // // A WizardStep instance represents a single wizard step. // //////////////////////////////////////////////////////////////////////////////// class WizardStep { public: enum StepAction { DEFAULT_ACTION = 0, // Usually next ALTERNATE_ACTION = 1, // Usually previous CANCEL_ACTION = 2 // The cancel button has been pressed. }; // Return the title for this state. If an empty string is returned, no title // will be visible. virtual const std::wstring GetTitle(Wizard* wizard) = 0; // Return the view for this state. The view is owned by the step virtual ChromeViews::View* GetView(Wizard* wizard) = 0; // Return whether this step is enabled given the provided wizard state. // If the step returns false it won't be shown in the flow. virtual bool IsEnabledFor(Wizard* wizard) = 0; // Inform the step that it is now visible. The step view has been added to a // view hierarchy. virtual void DidBecomeVisible(Wizard* wizard) = 0; // Inform the step that it is about to become invisible. Any // change pending in the UI should be flushed. |action| defines what button // the user clicked. (see above) virtual void WillBecomeInvisible(Wizard* wizard, StepAction action) = 0; // Fill lines with some human readable text describing what this step will do // The provided strings are owned by the caller. virtual void GetSummary(Wizard* wizard, std::vector* lines) = 0; // Dispose this step. This should delete the step. virtual void Dispose() = 0; // Return a custom wizard navigation descriptor. This method can return NULL // to simply use the default buttons. The returned descriptor is owned by // the receiver and is assumed to be valid as long as the receiver is // visible. Call Wizard::NavigationDescriptorChanged() if you need to change // the navigation buttons while the wizard step is visible. virtual WizardNavigationDescriptor* GetNavigationDescriptor() = 0; }; #endif // CHROME_BROWSER_WIZARD_WIZARD_STEP_H