//# 0 errors, 54 messages
//#
/*
    //#UIController.java:1:1: class: com.dmdirc.ui.interfaces.UIController
    //#UIController.java:1:1: method: com.dmdirc.ui.interfaces.UIController.com.dmdirc.ui.interfaces.UIController__static_init
 * Copyright (c) 2006-2009 Chris Smith, Shane Mc Cormack, Gregory Holmes
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.dmdirc.ui.interfaces;

import com.dmdirc.Channel;
import com.dmdirc.FrameContainer;
import com.dmdirc.Query;
import com.dmdirc.Server;
import com.dmdirc.WritableFrameContainer;
import com.dmdirc.commandparser.parsers.CommandParser;
import com.dmdirc.config.prefs.PreferencesInterface;
import com.dmdirc.ui.core.dialogs.sslcertificate.SSLCertificateDialogModel;
import com.dmdirc.updater.Update;

import java.net.URI;
import java.util.List;

/**
 * Defines the methods that should be implemented by UI controllers. Controllers
 * handle the various aspects of a UI implementation.
 *
 * @author Chris
 */
public interface UIController {
    
    /**
     * Retrieves the main window used by this UI.
     *
     * @return This UI's main window
     */
    MainWindow getMainWindow();
    
    /**
     * Retrieves the status bar component used by this UI.
     *
     * @return This UI's status bar
     */
    StatusBar getStatusBar();
    
    /**
     * Creates a channel window for the specified channel.
     *
     * @param channel The channel that is requesting a window be made
     * @return A new channel window for the specified channel
     */
    ChannelWindow getChannel(Channel channel);
    
    /**
     * Creates a server window for the specified server.
     *
     * @param server The server that is requesting a window be made
     * @return A new server window for the specified server
     */
    ServerWindow getServer(Server server);
    
    /**
     * Creates a query window for the specified query.
     *
     * @param query The query that is requesting a window be made
     * @return A new query window for the specified query
     */
    QueryWindow getQuery(Query query);
    
    /**
     * Creates a new custom window instance.
     *
     * @param owner The owner of the input window
     * @return A new custom window
     */
    Window getWindow(FrameContainer owner);
    
    /**
     * Creates a new custom input window instance.
     *
     * @param owner The owner of the input window
     * @param commandParser The command parser to be used
     * @return A new custom input window
     */
    InputWindow getInputWindow(WritableFrameContainer owner, CommandParser commandParser);
    
    /**
     * Returns an updater dialog for the specified updates.
     *
     * @param updates Updates available
     *
     * @return UpdaterDialog
     */
    UpdaterDialog getUpdaterDialog(List<Update> updates);
    
    /**
     * Shows the first run wizard for the ui.
     */
    void showFirstRunWizard();
    
    /**
     * Shows the (addons) migration wizard for the ui.
     */
    void showMigrationWizard();

    /**
     * Shows the SSL certificate information dialog.
     *
     * @param model The dialog model to use
     */
    void showSSLCertificateDialog(SSLCertificateDialogModel model);
    
    /**
     * Shows a channel settigns dialog for specified channel.
     *
     * @param channel Channel to show the dialog for
     */
    void showChannelSettingsDialog(Channel channel);
    
    /**
     * Shows a server settigns dialog for specified server.
     *
     * @param server Server to show the dialog for
     */
    void showServerSettingsDialog(Server server);
    
    /**
     * Initialises any settings required by this UI (this is always called
     * before any aspect of the UI is instansiated).
     */
    void initUISettings();
    
    /**
     * Returns the active window.
     * 
     * @return Active window or null
     */
    Window getActiveWindow();
    
    /**
     * Returns the active server.
     * 
     * @return Active server null
     */
    Server getActiveServer();
    
    /**
     * Shows the unknown URL protocol handling dialog for a URL.
     * 
     * @param url full url
     */
    void showURLDialog(final URI url);
    
    /**
     * Show feedback nag.
     */
    void showFeedbackNag();
    
    /**
     * Shows a message dialog to the user.
     * 
     * @param title Dialog title
     * @param message Message to display
     */
    void showMessageDialog(final String title, final String message);
    
    /**
     * Requests user input.
     * 
     * @param prompt The prompt to display
     * @return The user-inputted string
     */
    String getUserInput(final String prompt);

    /**
     * Retrieves the object used to display the plugin preferences panel.
     *
     * @return The plugin preferences panel
     */
    PreferencesInterface getPluginPrefsPanel();

    /**
     * Retrieves the object used to display the updates preferences panel.
     *
     * @return The updates preferences panel
     */
    PreferencesInterface getUpdatesPrefsPanel();

    /**
     * Retrieves the object used to display the URL handlers preferences panel.
     *
     * @return The url handlers preferences panel
     */
    PreferencesInterface getUrlHandlersPrefsPanel();

    /**
     * Retrieves the object used to display the themes preferences panel.
     *
     * @return The themes preferences panel
     */
    PreferencesInterface getThemesPrefsPanel();
    
}
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Descendant_Table[com/dmdirc/ui/interfaces/UIController]
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getActiveServer()Lcom/dmdirc/Server;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getActiveWindow()Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getChannel(Lcom/dmdirc/Channel;)Lcom/dmdirc/ui/interfaces/ChannelWindow;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getInputWindow(Lcom/dmdirc/WritableFrameContainer;Lcom/dmdirc/commandparser/parsers/CommandParser;)Lcom/dmdirc/ui/interfaces/InputWindow;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getMainWindow()Lcom/dmdirc/ui/interfaces/MainWindow;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getPluginPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getQuery(Lcom/dmdirc/Query;)Lcom/dmdirc/ui/interfaces/QueryWindow;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getServer(Lcom/dmdirc/Server;)Lcom/dmdirc/ui/interfaces/ServerWindow;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getStatusBar()Lcom/dmdirc/ui/interfaces/StatusBar;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getThemesPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUpdaterDialog(Ljava/util/List;)Lcom/dmdirc/ui/interfaces/UpdaterDialog;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUpdatesPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUrlHandlersPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUserInput(Ljava/lang/String;)Ljava/lang/String;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getWindow(Lcom/dmdirc/FrameContainer;)Lcom/dmdirc/ui/interfaces/Window;
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.initUISettings()V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showChannelSettingsDialog(Lcom/dmdirc/Channel;)V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showFeedbackNag()V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showFirstRunWizard()V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showMessageDialog(Ljava/lang/String;Ljava/lang/String;)V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showMigrationWizard()V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showSSLCertificateDialog(Lcom/dmdirc/ui/core/dialogs/sslcertificate/SSLCertificateDialogModel;)V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showServerSettingsDialog(Lcom/dmdirc/Server;)V
    //#output(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showURLDialog(Ljava/net/URI;)V
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Descendant_Table[com/dmdirc/ui/interfaces/UIController] == &__Dispatch_Table
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getActiveServer()Lcom/dmdirc/Server; == &getActiveServer
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getActiveWindow()Lcom/dmdirc/ui/interfaces/Window; == &getActiveWindow
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getChannel(Lcom/dmdirc/Channel;)Lcom/dmdirc/ui/interfaces/ChannelWindow; == &getChannel
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getInputWindow(Lcom/dmdirc/WritableFrameContainer;Lcom/dmdirc/commandparser/parsers/CommandParser;)Lcom/dmdirc/ui/interfaces/InputWindow; == &getInputWindow
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getMainWindow()Lcom/dmdirc/ui/interfaces/MainWindow; == &getMainWindow
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getPluginPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface; == &getPluginPrefsPanel
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getQuery(Lcom/dmdirc/Query;)Lcom/dmdirc/ui/interfaces/QueryWindow; == &getQuery
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getServer(Lcom/dmdirc/Server;)Lcom/dmdirc/ui/interfaces/ServerWindow; == &getServer
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getStatusBar()Lcom/dmdirc/ui/interfaces/StatusBar; == &getStatusBar
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getThemesPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface; == &getThemesPrefsPanel
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUpdaterDialog(Ljava/util/List;)Lcom/dmdirc/ui/interfaces/UpdaterDialog; == &getUpdaterDialog
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUpdatesPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface; == &getUpdatesPrefsPanel
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUrlHandlersPrefsPanel()Lcom/dmdirc/config/prefs/PreferencesInterface; == &getUrlHandlersPrefsPanel
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getUserInput(Ljava/lang/String;)Ljava/lang/String; == &getUserInput
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.getWindow(Lcom/dmdirc/FrameContainer;)Lcom/dmdirc/ui/interfaces/Window; == &getWindow
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.initUISettings()V == &initUISettings
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showChannelSettingsDialog(Lcom/dmdirc/Channel;)V == &showChannelSettingsDialog
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showFeedbackNag()V == &showFeedbackNag
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showFirstRunWizard()V == &showFirstRunWizard
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showMessageDialog(Ljava/lang/String;Ljava/lang/String;)V == &showMessageDialog
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showMigrationWizard()V == &showMigrationWizard
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showSSLCertificateDialog(Lcom/dmdirc/ui/core/dialogs/sslcertificate/SSLCertificateDialogModel;)V == &showSSLCertificateDialog
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showServerSettingsDialog(Lcom/dmdirc/Server;)V == &showServerSettingsDialog
    //#post(com.dmdirc.ui.interfaces.UIController__static_init): __Dispatch_Table.showURLDialog(Ljava/net/URI;)V == &showURLDialog
    //#UIController.java:: end of method: com.dmdirc.ui.interfaces.UIController.com.dmdirc.ui.interfaces.UIController__static_init
    //#UIController.java:: end of class: com.dmdirc.ui.interfaces.UIController
