예제 #1
0
void LoadMaskCommand::onExecute(Context* context)
{
  const ContextReader reader(context);

  if (context->isUIAvailable()) {
    FileSelectorFiles selectedFilename;
    if (!app::show_file_selector(
          "Load .msk File", m_filename, "msk",
          FileSelectorType::Open, selectedFilename))
      return;

    m_filename = selectedFilename.front();
  }

  base::UniquePtr<Mask> mask(load_msk_file(m_filename.c_str()));
  if (!mask)
    throw base::Exception("Error loading .msk file: %s",
                          static_cast<const char*>(m_filename.c_str()));

  {
    ContextWriter writer(reader);
    Document* document = writer.document();
    Transaction transaction(writer.context(), "Mask Load", DoesntModifyDocument);
    transaction.execute(new cmd::SetMask(document, mask));
    transaction.commit();

    document->generateMaskBoundaries();
    update_screen_for_document(document);
  }
}
예제 #2
0
void LoadMaskCommand::onExecute(Context* context)
{
  const ContextReader reader(context);

  base::string filename = m_filename;

  if (context->isUiAvailable()) {
    filename = app::show_file_selector("Load .msk File", filename, "msk");
    if (filename.empty())
      return;

    m_filename = filename;
  }

  base::UniquePtr<Mask> mask(load_msk_file(m_filename.c_str()));
  if (!mask)
    throw base::Exception("Error loading .msk file: %s",
                          static_cast<const char*>(m_filename.c_str()));

  {
    ContextWriter writer(reader);
    Document* document = writer.document();
    UndoTransaction undo(writer.context(), "Mask Load", undo::DoesntModifyDocument);

    // Add the mask change into the undo history.
    if (undo.isEnabled())
      undo.pushUndoer(new undoers::SetMask(undo.getObjects(), document));

    document->setMask(mask);

    undo.commit();
    document->generateMaskBoundaries();
    update_screen_for_document(document);
  }
}
예제 #3
0
void LoadMaskCommand::onExecute(Context* context)
{
  const ActiveDocumentReader document(context);

  base::string filename = m_filename;

  if (context->isUiAvailable()) {
    filename = ase_file_selector("Load .msk File", filename, "msk");
    if (filename.empty())
      return;

    m_filename = filename;
  }

  UniquePtr<Mask> mask(load_msk_file(m_filename.c_str()));
  if (!mask)
    throw base::Exception("Error loading .msk file: %s",
                          static_cast<const char*>(m_filename.c_str()));

  {
    DocumentWriter documentWriter(document);
    undo::UndoHistory* undo(documentWriter->getUndoHistory());

    // Add the mask change into the undo history.
    if (undo->isEnabled()) {
      undo->setLabel("Mask Load");
      undo->setModification(undo::DoesntModifyDocument);
      undo->pushUndoer(new undoers::SetMask(undo->getObjects(), documentWriter));
    }

    documentWriter->setMask(mask);
    documentWriter->generateMaskBoundaries();
  }

  update_screen_for_document(document);
}