X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2Fxforms%2FFormPrint.C;h=9f33f36219be6d96a9b8d8a8687ee4090fda0507;hb=27652900a60fd078f161ce866ddaed21dba21eff;hp=d9ad659b49d75cf58962d8ccecb90ab6220212a6;hpb=9c36dd0f40f2e2e90fce8b2f33519a5d99d9be8b;p=lyx.git diff --git a/src/frontends/xforms/FormPrint.C b/src/frontends/xforms/FormPrint.C index d9ad659b49..9f33f36219 100644 --- a/src/frontends/xforms/FormPrint.C +++ b/src/frontends/xforms/FormPrint.C @@ -1,64 +1,59 @@ -/* FormPrint.C - * FormPrint Interface Class Implementation +/* + * \file FormPrint.C + * Copyright 2000-2001 The LyX Team. + * See the file COPYING. + * + * \author Allan Rae, rae@lyx.org + * \author Angus Leeming, a.leeming@.ac.uk */ #include -#include FORMS_H_LOCATION - #ifdef __GNUG__ #pragma implementation #endif +#include "xformsBC.h" +#include "ControlPrint.h" #include "FormPrint.h" #include "form_print.h" #include "input_validators.h" -#include "LyXView.h" -#include "Dialogs.h" #include "support/lstrings.h" -#include "lyxrc.h" + +#include "lyxrc.h" // needed by PrinterParams #include "PrinterParams.h" + +#include "LyXView.h" +#include "xforms_helpers.h" // for browseFile + +/* +#include "LyXView.h" +#include "Dialogs.h" #include "Liason.h" #include "debug.h" #include "BufferView.h" -#include "lyx_gui_misc.h" // WriteAlert -#include "xforms_helpers.h" // for browseFile - -#ifdef SIGC_CXX_NAMESPACES -using SigC::slot; -#endif - -#ifdef CXX_WORKING_NAMESPACES -using Liason::printBuffer; -using Liason::getPrinterParams; -#endif +*/ +//using Liason::printBuffer; +//using Liason::getPrinterParams; using std::make_pair; -FormPrint::FormPrint(LyXView * lv, Dialogs * d) - : FormBaseBD(lv, d, _("Print")), +typedef FormCB > base_class; + +FormPrint::FormPrint(ControlPrint & c) + : base_class(c, _("Print")), target_(2), order_(2), which_(3) -{ - // let the dialog be shown - // This is a permanent connection so we won't bother - // storing a copy because we won't be disconnecting. - d->showPrint.connect(slot(this, &FormPrint::show)); -} +{} void FormPrint::build() { dialog_.reset(build_print()); - // Workaround dumb xforms sizing bug - minw_ = form()->w; - minh_ = form()->h; - // Manage the ok, apply and cancel/close buttons bc().setOK(dialog_->button_ok); bc().setApply(dialog_->button_apply); bc().setCancel(dialog_->button_cancel); - bc().refresh(); // allow controlling of input and ok/apply (de)activation fl_set_input_return(dialog_->input_printer, @@ -107,20 +102,8 @@ void FormPrint::build() } -FL_FORM * FormPrint::form() const -{ - if (dialog_.get()) - return dialog_->form; - return 0; -} - - void FormPrint::apply() { - if (!lv_->view()->available()) { - return; - } - PrinterParams::WhichPages wp(static_cast(which_.getButton())); @@ -138,70 +121,61 @@ void FormPrint::apply() PrinterParams::Target t(static_cast(target_.getButton())); - // we really should use the return value here I think. - if (!printBuffer(lv_->buffer(), - PrinterParams(t, - string(fl_get_input(dialog_->input_printer)), - string(fl_get_input(dialog_->input_file)), - wp, from, to, - static_cast(order_.getButton()), - !static_cast(fl_get_button(dialog_-> - radio_collated)), - strToInt(fl_get_input(dialog_->input_count))))) { - WriteAlert(_("Error:"), - _("Unable to print"), - _("Check that your parameters are correct")); - } + PrinterParams const pp(t, + string(fl_get_input(dialog_->input_printer)), + string(fl_get_input(dialog_->input_file)), + wp, from, to, + static_cast(order_.getButton()), + !static_cast(fl_get_button(dialog_->radio_collated)), + strToInt(fl_get_input(dialog_->input_count))); + + controller().params() = pp; } void FormPrint::update() { - if (dialog_.get() - && lv_->view()->available()) { - PrinterParams pp(getPrinterParams(lv_->buffer())); - - fl_set_input(dialog_->input_printer, pp.printer_name.c_str()); - fl_set_input(dialog_->input_file, pp.file_name.c_str()); - - target_.setButton(pp.target); - order_.setButton(pp.reverse_order); - which_.setButton(pp.which_pages); - - // hmmm... maybe a bit weird but maybe not - // we might just be remembering the last - // time this was printed. - if (!pp.from_page.empty()) { - fl_set_input(dialog_->input_from_page, - pp.from_page.c_str()); - // we only set the "to" page of a range - // if there's a corresponding "from" - fl_activate_object(dialog_->input_to_page); - if (pp.to_page) { - fl_set_input(dialog_->input_to_page, - tostr(pp.to_page).c_str()); - } else { - fl_set_input(dialog_->input_to_page,""); - } + PrinterParams & pp = controller().params(); + + fl_set_input(dialog_->input_printer, pp.printer_name.c_str()); + fl_set_input(dialog_->input_file, pp.file_name.c_str()); + + target_.setButton(pp.target); + order_.setButton(pp.reverse_order); + which_.setButton(pp.which_pages); + + // hmmm... maybe a bit weird but maybe not + // we might just be remembering the last + // time this was printed. + if (!pp.from_page.empty()) { + fl_set_input(dialog_->input_from_page, pp.from_page.c_str()); + + // we only set the "to" page of a range + // if there's a corresponding "from" + fl_activate_object(dialog_->input_to_page); + if (pp.to_page) { + fl_set_input(dialog_->input_to_page, + tostr(pp.to_page).c_str()); } else { - fl_deactivate_object(dialog_->input_to_page); fl_set_input(dialog_->input_to_page,""); - fl_set_input(dialog_->input_from_page,""); } - fl_set_input(dialog_->input_count, - tostr(pp.count_copies).c_str()); - bc().valid(true); + } else { + fl_deactivate_object(dialog_->input_to_page); + fl_set_input(dialog_->input_to_page,""); + fl_set_input(dialog_->input_from_page,""); } + + fl_set_input(dialog_->input_count, tostr(pp.count_copies).c_str()); } // It would be nice if we checked for cases like: // Print only-odd-pages and from_page == an even number // -bool FormPrint::input(FL_OBJECT * ob, long) +ButtonPolicy::SMInput FormPrint::input(FL_OBJECT * ob, long) { - bool activate = true; + ButtonPolicy::SMInput activate = ButtonPolicy::SMI_VALID; // using a fl_input_filter that only permits numbers no '-' or '+' // and the user cannot enter a negative number even if they try. @@ -216,13 +190,13 @@ bool FormPrint::input(FL_OBJECT * ob, long) // values but I'll disable the ok/apply until // the user fixes it since they may be editting // one of the fields. - activate = false; + activate = ButtonPolicy::SMI_INVALID; // set both backgrounds to red? } } else if (strlen(fl_get_input(dialog_->input_to_page))) { // from is empty but to exists so probably editting from // therefore deactivate ok and apply until form is valid again - activate = false; + activate = ButtonPolicy::SMI_INVALID; } else { // both from and to are empty. This is valid so activate // ok and apply but deactivate to @@ -231,40 +205,36 @@ bool FormPrint::input(FL_OBJECT * ob, long) if (fl_get_button(dialog_->radio_file) && !strlen(fl_get_input(dialog_->input_file))) { - activate = false; + activate = ButtonPolicy::SMI_INVALID; } if (ob == dialog_->button_browse) { - browse(); + // Get the filename from the dialog + string const in_name = fl_get_input(dialog_->input_file); + string const out_name = controller().Browse(in_name); + + // Save the filename to the dialog + if (out_name != in_name && !out_name.empty()) { + fl_set_input(dialog_->input_file, out_name.c_str()); + input(0, 0); + } + + // select the file radio + if (!out_name.empty()) { + fl_set_button(dialog_->radio_file, 1); + fl_set_button(dialog_->radio_printer, 0); + } } - // it is probably legal to have no printer name since the system will - // have a default printer set. Or should have. -// if (fl_get_button(dialog_->radio_printer) -// && !strlen(fl_get_input(dialog_->input_printer))) { -// activate = false; -// } - return activate; -} - - -void FormPrint::browse() -{ - // Get the filename from the dialog - string const filename = fl_get_input(dialog_->input_file); - - string const title = N_("Print to file"); - string const pattern = "*.ps"; - - // Show the file browser dialog - string const new_filename = - browseFile(lv_, filename, title, pattern, - make_pair(string(), string()), - make_pair(string(), string())); - - // Save the filename to the dialog - if (new_filename != filename && !new_filename.empty()) { - fl_set_input(dialog_->input_file, new_filename.c_str()); - input(0, 0); + // if we type into file, select that as a target + if (ob == dialog_->input_file && fl_get_button(dialog_->radio_printer) + && strlen(fl_get_input(dialog_->input_file))) { + fl_set_button(dialog_->radio_file, 1); + fl_set_button(dialog_->radio_printer, 0); + } else if (ob == dialog_->input_printer) { + fl_set_button(dialog_->radio_file, 0); + fl_set_button(dialog_->radio_printer, 1); } + + return activate; }