/****
 *
 * Implementation of file-menu.h.
 *
 * The implementation is partially stubbed in that it supplies only dummy
 * parameter values to model functions.
 *
 */

#include "file-menu.h"


FileMenu::FileMenu(Name* n, File* f) : View(NULL, f) {
    /*
     * For convenience, save a copy of the model as a downcast value.
     */
    this->f = f;

    /*
     * Make the window of this an IV pulldown menu.
     */
    w = pm = new PulldownMenu(n->ConstConvert());
}

FileMenu::~FileMenu() {
}

void FileMenu::Compose() {
    /*
     * Insert the six menu items, passing each the File model for subsequent
     * access in menu item Do functions.
     */
    pm->Include(new NewMenuItem(f));
    pm->Include(new OpenMenuItem(f));
    pm->Include(new SaveMenuItem(f));
    pm->Include(new SaveAsMenuItem(f));
    pm->Include(new PrintMenuItem(f));
    pm->Include(new QuitMenuItem(f));
}


NewMenuItem::NewMenuItem(File* f) : MenuItem("New") {
    this->f = f;
}

OpenMenuItem::OpenMenuItem(File* f) : MenuItem("Open ...") {
    this->f = f;
}

SaveMenuItem::SaveMenuItem(File* f) : MenuItem("Save") {
    this->f = f;
}

SaveAsMenuItem::SaveAsMenuItem(File* f) : MenuItem("SaveAs ...") {
    this->f = f;
}

PrintMenuItem::PrintMenuItem(File* f) : MenuItem("Print ...") {
    this->f = f;
}

QuitMenuItem::QuitMenuItem(File* f) : MenuItem("Quit") {
    this->f = f;
}

void NewMenuItem::Do() {
    /*
     * Call the File::Open model function.
     */
    f->New();
}

void OpenMenuItem::Do() {
    /*
     * Call the File::Open model function.
     */
    f->Open(NULL);
}

void SaveMenuItem::Do() {
    /*
     * Call the File::Save model function.
     */
    f->Save();
}

void SaveAsMenuItem::Do() {
    /*
     * Call the File::SaveAs model function.
     */
    f->SaveAs(NULL);
}

void PrintMenuItem::Do() {
    /*
     * Call the File::Print model function.
     */
    f->Print();
}

void QuitMenuItem::Do() {
    /*
     * Call the File::Quit model function.
     */
    f->Quit();
}