Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/toolkit/components/printing/content/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 15 kB image not shown  

Quelle  printPageSetup.js   Sprache: JAVA

 
// -*- indent-tabs-mode: nil; js-indent-level: 2 -*-

/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


var gDialog;
var paramBlock;
var gPrintService = null;
var gPrintSettings = null;
var gStringBundle = null;
var gDoingMetric = false;

var gPrintSettingsInterface = Ci.nsIPrintSettings;
var gDoDebug = false;

// ---------------------------------------------------
function initDialog() {
  gDialog = {};

  gDialog.orientation = document.getElementById("orientation");
  gDialog.portrait = document.getElementById("portrait");
  gDialog.landscape = document.getElementById("landscape");

  gDialog.printBG = document.getElementById("printBG");

  gDialog.shrinkToFit = document.getElementById("shrinkToFit");

  gDialog.marginGroup = document.getElementById("marginGroup");

  gDialog.marginPage = document.getElementById("marginPage");
  gDialog.marginTop = document.getElementById("marginTop");
  gDialog.marginBottom = document.getElementById("marginBottom");
  gDialog.marginLeft = document.getElementById("marginLeft");
  gDialog.marginRight = document.getElementById("marginRight");

  gDialog.topInput = document.getElementById("topInput");
  gDialog.bottomInput = document.getElementById("bottomInput");
  gDialog.leftInput = document.getElementById("leftInput");
  gDialog.rightInput = document.getElementById("rightInput");

  gDialog.hLeftOption = document.getElementById("hLeftOption");
  gDialog.hCenterOption = document.getElementById("hCenterOption");
  gDialog.hRightOption = document.getElementById("hRightOption");

  gDialog.fLeftOption = document.getElementById("fLeftOption");
  gDialog.fCenterOption = document.getElementById("fCenterOption");
  gDialog.fRightOption = document.getElementById("fRightOption");

  gDialog.scalingLabel = document.getElementById("scalingInput");
  gDialog.scalingInput = document.getElementById("scalingInput");

  gDialog.enabled = false;

  document.addEventListener("dialogaccept", onAccept);
}

// ---------------------------------------------------
function isListOfPrinterFeaturesAvailable() {
  return Services.prefs.getBoolPref(
    "print.tmp.printerfeatures." +
      gPrintSettings.printerName +
      ".has_special_printerfeatures",
    false
  );
}

// ---------------------------------------------------
function checkDouble(element) {
  element.value = element.value.replace(/[^.0-9]/g, "");
}

// Theoretical paper width/height.
var gPageWidth = 8.5;
var gPageHeight = 11.0;

// ---------------------------------------------------
function setOrientation() {
  var selection = gDialog.orientation.selectedItem;

  var style = "background-color:white;";
  if (
    (selection == gDialog.portrait && gPageWidth > gPageHeight) ||
    (selection == gDialog.landscape && gPageWidth < gPageHeight)
  ) {
    // Swap width/height.
    var temp = gPageHeight;
    gPageHeight = gPageWidth;
    gPageWidth = temp;
  }
  var div = gDoingMetric ? 100 : 10;
  style +=
    "width:" +
    gPageWidth / div +
    unitString() +
    ";height:" +
    gPageHeight / div +
    unitString() +
    ";";
  gDialog.marginPage.setAttribute("style", style);
}

// ---------------------------------------------------
function unitString() {
  return gPrintSettings.paperSizeUnit ==
    gPrintSettingsInterface.kPaperSizeInches
    ? "in"
    : "mm";
}

// ---------------------------------------------------
function checkMargin(value, max, other) {
  // Don't draw this margin bigger than permitted.
  return Math.min(value, max - other.value);
}

// ---------------------------------------------------
function changeMargin(node) {
  // Correct invalid input.
  checkDouble(node);

  // Reset the margin height/width for this node.
  var val = node.value;
  var nodeToStyle;
  var attr = "width";
  if (node == gDialog.topInput) {
    nodeToStyle = gDialog.marginTop;
    val = checkMargin(val, gPageHeight, gDialog.bottomInput);
    attr = "height";
  } else if (node == gDialog.bottomInput) {
    nodeToStyle = gDialog.marginBottom;
    val = checkMargin(val, gPageHeight, gDialog.topInput);
    attr = "height";
  } else if (node == gDialog.leftInput) {
    nodeToStyle = gDialog.marginLeft;
    val = checkMargin(val, gPageWidth, gDialog.rightInput);
  } else {
    nodeToStyle = gDialog.marginRight;
    val = checkMargin(val, gPageWidth, gDialog.leftInput);
  }
  var style = attr + ":" + val / 10 + unitString() + ";";
  nodeToStyle.setAttribute("style", style);
}

// ---------------------------------------------------
function changeMargins() {
  changeMargin(gDialog.topInput);
  changeMargin(gDialog.bottomInput);
  changeMargin(gDialog.leftInput);
  changeMargin(gDialog.rightInput);
}

// ---------------------------------------------------
async function customize(node) {
  // If selection is now "Custom..." then prompt user for custom setting.
  if (node.value == 6) {
    let [title, promptText] = await document.l10n.formatValues([
      { id: "custom-prompt-title" },
      { id: "custom-prompt-prompt" },
    ]);
    var result = { value: node.custom };
    var ok = Services.prompt.prompt(window, title, promptText, result, null, {
      value: false,
    });
    if (ok) {
      node.custom = result.value;
    }
  }
}

// ---------------------------------------------------
function setHeaderFooter(node, value) {
  node.value = hfValueToId(value);
  if (node.value == 6) {
    // Remember current Custom... value.
    node.custom = value;
  } else {
    // Start with empty Custom... value.
    node.custom = "";
  }
}

var gHFValues = [];
gHFValues["&T"] = 1;
gHFValues["&U"] = 2;
gHFValues["&D"] = 3;
gHFValues["&P"] = 4;
gHFValues["&PT"] = 5;

function hfValueToId(val) {
  if (val in gHFValues) {
    return gHFValues[val];
  }
  if (val.length) {
    return 6; // Custom...
  }
  return 0; // --blank--
}

function hfIdToValue(node) {
  var result = "";
  switch (parseInt(node.value)) {
    case 0:
      break;
    case 1:
      result = "&T";
      break;
    case 2:
      result = "&U";
      break;
    case 3:
      result = "&D";
      break;
    case 4:
      result = "&P";
      break;
    case 5:
      result = "&PT";
      break;
    case 6:
      result = node.custom;
      break;
  }
  return result;
}

async function lastUsedPrinterNameOrDefault() {
  let printerList = Cc["@mozilla.org/gfx/printerlist;1"].getService(
    Ci.nsIPrinterList
  );
  let lastUsedName = gPrintService.lastUsedPrinterName;
  let printers = await printerList.printers;
  for (let printer of printers) {
    printer.QueryInterface(Ci.nsIPrinter);
    if (printer.name == lastUsedName) {
      return lastUsedName;
    }
  }
  return printerList.systemDefaultPrinterName;
}

async function setPrinterDefaultsForSelectedPrinter() {
  if (gPrintSettings.printerName == "") {
    gPrintSettings.printerName = await lastUsedPrinterNameOrDefault();
  }

  // First get any defaults from the printer
  gPrintService.initPrintSettingsFromPrinter(
    gPrintSettings.printerName,
    gPrintSettings
  );

  // now augment them with any values from last time
  gPrintService.initPrintSettingsFromPrefs(
    gPrintSettings,
    true,
    gPrintSettingsInterface.kInitSaveAll
  );

  if (gDoDebug) {
    dump(
      "pagesetup/setPrinterDefaultsForSelectedPrinter: printerName='" +
        gPrintSettings.printerName +
        "', orientation='" +
        gPrintSettings.orientation +
        "'\n"
    );
  }
}

// ---------------------------------------------------
async function loadDialog() {
  var print_orientation = 0;
  var print_margin_top = 0.5;
  var print_margin_left = 0.5;
  var print_margin_bottom = 0.5;
  var print_margin_right = 0.5;

  try {
    gPrintService = Cc["@mozilla.org/gfx/printsettings-service;1"];
    if (gPrintService) {
      gPrintService = gPrintService.getService();
      if (gPrintService) {
        gPrintService = gPrintService.QueryInterface(
          Ci.nsIPrintSettingsService
        );
      }
    }
  } catch (ex) {
    dump("loadDialog: ex=" + ex + "\n");
  }

  await setPrinterDefaultsForSelectedPrinter();

  gDialog.printBG.checked =
    gPrintSettings.printBGColors || gPrintSettings.printBGImages;

  gDialog.shrinkToFit.checked = gPrintSettings.shrinkToFit;

  gDialog.scalingLabel.disabled = gDialog.scalingInput.disabled =
    gDialog.shrinkToFit.checked;

  if (
    gPrintSettings.paperSizeUnit == gPrintSettingsInterface.kPaperSizeInches
  ) {
    document.l10n.setAttributes(
      gDialog.marginGroup,
      "margin-group-label-inches"
    );
    gDoingMetric = false;
  } else {
    document.l10n.setAttributes(
      gDialog.marginGroup,
      "margin-group-label-metric"
    );
    // Also, set global page dimensions for A4 paper, in millimeters (assumes portrait at this point).
    gPageWidth = 2100;
    gPageHeight = 2970;
    gDoingMetric = true;
  }

  print_orientation = gPrintSettings.orientation;
  print_margin_top = convertMarginInchesToUnits(
    gPrintSettings.marginTop,
    gDoingMetric
  );
  print_margin_left = convertMarginInchesToUnits(
    gPrintSettings.marginLeft,
    gDoingMetric
  );
  print_margin_right = convertMarginInchesToUnits(
    gPrintSettings.marginRight,
    gDoingMetric
  );
  print_margin_bottom = convertMarginInchesToUnits(
    gPrintSettings.marginBottom,
    gDoingMetric
  );

  if (gDoDebug) {
    dump("print_orientation " + print_orientation + "\n");

    dump("print_margin_top " + print_margin_top + "\n");
    dump("print_margin_left " + print_margin_left + "\n");
    dump("print_margin_right " + print_margin_right + "\n");
    dump("print_margin_bottom " + print_margin_bottom + "\n");
  }

  if (print_orientation == gPrintSettingsInterface.kPortraitOrientation) {
    gDialog.orientation.selectedItem = gDialog.portrait;
  } else if (
    print_orientation == gPrintSettingsInterface.kLandscapeOrientation
  ) {
    gDialog.orientation.selectedItem = gDialog.landscape;
  }

  // Set orientation the first time on a timeout so the dialog sizes to the
  // maximum height specified in the .xul file.  Otherwise, if the user switches
  // from landscape to portrait, the content grows and the buttons are clipped.
  setTimeout(setOrientation, 0);

  gDialog.topInput.value = print_margin_top.toFixed(1);
  gDialog.bottomInput.value = print_margin_bottom.toFixed(1);
  gDialog.leftInput.value = print_margin_left.toFixed(1);
  gDialog.rightInput.value = print_margin_right.toFixed(1);
  changeMargins();

  setHeaderFooter(gDialog.hLeftOption, gPrintSettings.headerStrLeft);
  setHeaderFooter(gDialog.hCenterOption, gPrintSettings.headerStrCenter);
  setHeaderFooter(gDialog.hRightOption, gPrintSettings.headerStrRight);

  setHeaderFooter(gDialog.fLeftOption, gPrintSettings.footerStrLeft);
  setHeaderFooter(gDialog.fCenterOption, gPrintSettings.footerStrCenter);
  setHeaderFooter(gDialog.fRightOption, gPrintSettings.footerStrRight);

  gDialog.scalingInput.value = (gPrintSettings.scaling * 100).toFixed(0);

  // Enable/disable widgets based in the information whether the selected
  // printer supports the matching feature or not
  if (isListOfPrinterFeaturesAvailable()) {
    if (
      Services.prefs.getBoolPref(
        "print.tmp.printerfeatures." +
          gPrintSettings.printerName +
          ".can_change_orientation"
      )
    ) {
      gDialog.orientation.removeAttribute("disabled");
    } else {
      gDialog.orientation.setAttribute("disabled""true");
    }
  }

  // Give initial focus to the orientation radio group.
  // Done on a timeout due to to bug 103197.
  setTimeout(function () {
    gDialog.orientation.focus();
  }, 0);
}

// ---------------------------------------------------
function onLoad() {
  // Init gDialog.
  initDialog();

  if (window.arguments[0] != null) {
    gPrintSettings = window.arguments[0].QueryInterface(Ci.nsIPrintSettings);
    paramBlock = window.arguments[1].QueryInterface(Ci.nsIDialogParamBlock);
  } else if (gDoDebug) {
    alert("window.arguments[0] == null!");
  }

  // default return value is "cancel"
  paramBlock.SetInt(0, 0);

  if (gPrintSettings) {
    loadDialog();
  } else if (gDoDebug) {
    alert("Could initialize gDialog, PrintSettings is null!");
  }
}

function convertUnitsMarginToInches(aVal, aIsMetric) {
  if (aIsMetric) {
    return aVal / 25.4;
  }
  return aVal;
}

function convertMarginInchesToUnits(aVal, aIsMetric) {
  if (aIsMetric) {
    return aVal * 25.4;
  }
  return aVal;
}

// ---------------------------------------------------
function onAccept() {
  if (gPrintSettings) {
    if (gDialog.orientation.selectedItem == gDialog.portrait) {
      gPrintSettings.orientation = gPrintSettingsInterface.kPortraitOrientation;
    } else {
      gPrintSettings.orientation =
        gPrintSettingsInterface.kLandscapeOrientation;
    }

    // save these out so they can be picked up by the device spec
    gPrintSettings.marginTop = convertUnitsMarginToInches(
      gDialog.topInput.value,
      gDoingMetric
    );
    gPrintSettings.marginLeft = convertUnitsMarginToInches(
      gDialog.leftInput.value,
      gDoingMetric
    );
    gPrintSettings.marginBottom = convertUnitsMarginToInches(
      gDialog.bottomInput.value,
      gDoingMetric
    );
    gPrintSettings.marginRight = convertUnitsMarginToInches(
      gDialog.rightInput.value,
      gDoingMetric
    );

    gPrintSettings.headerStrLeft = hfIdToValue(gDialog.hLeftOption);
    gPrintSettings.headerStrCenter = hfIdToValue(gDialog.hCenterOption);
    gPrintSettings.headerStrRight = hfIdToValue(gDialog.hRightOption);

    gPrintSettings.footerStrLeft = hfIdToValue(gDialog.fLeftOption);
    gPrintSettings.footerStrCenter = hfIdToValue(gDialog.fCenterOption);
    gPrintSettings.footerStrRight = hfIdToValue(gDialog.fRightOption);

    gPrintSettings.printBGColors = gDialog.printBG.checked;
    gPrintSettings.printBGImages = gDialog.printBG.checked;

    gPrintSettings.shrinkToFit = gDialog.shrinkToFit.checked;

    var scaling = document.getElementById("scalingInput").value;
    if (scaling < 10.0) {
      scaling = 10.0;
    }
    if (scaling > 500.0) {
      scaling = 500.0;
    }
    scaling /= 100.0;
    gPrintSettings.scaling = scaling;

    if (gDoDebug) {
      dump("******* Page Setup Accepting ******\n");
      dump("print_margin_top " + gDialog.topInput.value + "\n");
      dump("print_margin_left " + gDialog.leftInput.value + "\n");
      dump("print_margin_right " + gDialog.bottomInput.value + "\n");
      dump("print_margin_bottom " + gDialog.rightInput.value + "\n");
    }
  }

  // set return value to "ok"
  if (paramBlock) {
    paramBlock.SetInt(0, 1);
  } else {
    dump("*** FATAL ERROR: No paramBlock\n");
  }

  var flags =
    gPrintSettingsInterface.kInitSaveMargins |
    gPrintSettingsInterface.kInitSaveHeaderLeft |
    gPrintSettingsInterface.kInitSaveHeaderCenter |
    gPrintSettingsInterface.kInitSaveHeaderRight |
    gPrintSettingsInterface.kInitSaveFooterLeft |
    gPrintSettingsInterface.kInitSaveFooterCenter |
    gPrintSettingsInterface.kInitSaveFooterRight |
    gPrintSettingsInterface.kInitSaveBGColors |
    gPrintSettingsInterface.kInitSaveBGImages |
    gPrintSettingsInterface.kInitSaveInColor |
    gPrintSettingsInterface.kInitSaveReversed |
    gPrintSettingsInterface.kInitSaveOrientation |
    gPrintSettingsInterface.kInitSaveShrinkToFit |
    gPrintSettingsInterface.kInitSaveScaling;

  // Note that this file is Windows only code, so this doesn't handle saving
  // for other platforms.
  // XXX Should we do this in nsPrintDialogServiceWin::ShowPageSetup (the code
  // that invokes us), since ShowPageSetup is where we do the saving for the
  // other platforms?
  gPrintService.maybeSavePrintSettingsToPrefs(gPrintSettings, flags);
}

// ---------------------------------------------------
function onCancel() {
  // set return value to "cancel"
  if (paramBlock) {
    paramBlock.SetInt(0, 0);
  } else {
    dump("*** FATAL ERROR: No paramBlock\n");
  }

  return true;
}

Messung V0.5
C=92 H=89 G=90

¤ Dauer der Verarbeitung: 0.27 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.