FormatOptionsPage::FormatOptionsPage(ZLDialogContent &dialogTab) {
	const ZLResource &styleResource = ZLResource::resource(KEY_STYLE);

	myComboEntry = new ComboOptionEntry(*this, styleResource[KEY_BASE].value());
	myComboEntry->addValue(myComboEntry->initialValue());

	ZLTextStyleCollection &collection = ZLTextStyleCollection::instance();
	ZLTextKind styles[] = { REGULAR, TITLE, SECTION_TITLE, SUBTITLE, H1, H2, H3, H4, H5, H6, ANNOTATION, EPIGRAPH, PREFORMATTED, AUTHOR, DATEKIND, POEM_TITLE, STANZA, VERSE };
	const int STYLES_NUMBER = sizeof(styles) / sizeof(ZLTextKind);
	for (int i = 0; i < STYLES_NUMBER; ++i) {
		const ZLTextStyleDecoration *decoration = collection.decoration(styles[i]);
		if (decoration != 0) {
			myComboEntry->addValue(styleResource[decoration->name()].value());
		}
	}
	dialogTab.addOption(ZLResourceKey("optionsFor"), myComboEntry);

	{
		const std::string &name = myComboEntry->initialValue();
		ZLTextBaseStyle &baseStyle = collection.baseStyle();

		registerEntries(dialogTab,
			KEY_LINESPACING, new ZLTextLineSpaceOptionEntry(baseStyle.LineSpacePercentOption, dialogTab.resource(KEY_LINESPACING), false),
			KEY_DUMMY, 0,//new ZLSimpleSpinOptionEntry("First Line Indent", baseStyle.firstLineIndentDeltaOption(), -300, 300, 1),
			name
		);

		registerEntries(dialogTab,
			KEY_ALIGNMENT, new ZLTextAlignmentOptionEntry(baseStyle.AlignmentOption, dialogTab.resource(KEY_ALIGNMENT), false),
			KEY_DUMMY, 0,
			name
		);
	}

	for (int i = 0; i < STYLES_NUMBER; ++i) {
		ZLTextStyleDecoration *d = collection.decoration(styles[i]);
		if ((d != 0) && (d->isFullDecoration())) {
			ZLTextFullStyleDecoration *decoration = (ZLTextFullStyleDecoration*)d;
			const std::string &name = styleResource[decoration->name()].value();
			
			registerEntries(dialogTab,
				KEY_SPACEBEFORE, new ZLSimpleSpinOptionEntry(decoration->SpaceBeforeOption, 1),
				KEY_LEFTINDENT, new ZLSimpleSpinOptionEntry(decoration->LeftIndentOption, 1),
				name
			);
			
			registerEntries(dialogTab,
				KEY_SPACEAFTER, new ZLSimpleSpinOptionEntry(decoration->SpaceAfterOption, 1),
				KEY_RIGHTINDENT, new ZLSimpleSpinOptionEntry(decoration->RightIndentOption, 1),
				name
			);
			
			registerEntries(dialogTab,
				KEY_LINESPACING, new ZLTextLineSpaceOptionEntry(decoration->LineSpacePercentOption, dialogTab.resource(KEY_LINESPACING), true),
				KEY_FIRSTLINEINDENT, new ZLSimpleSpinOptionEntry(decoration->FirstLineIndentDeltaOption, 1),
				name
			);

			registerEntries(dialogTab,
				KEY_ALIGNMENT, new ZLTextAlignmentOptionEntry(decoration->AlignmentOption, dialogTab.resource(KEY_ALIGNMENT), true),
				KEY_DUMMY, 0,
				name
			);
		}
	}

	myComboEntry->onValueSelected(0);
}
예제 #2
0
StyleOptionsPage::StyleOptionsPage(ZLDialogContent &dialogTab, ZLPaintContext &context) {
  myComboEntry = new ComboOptionEntry(*this, "Options For", "Base");
  myComboEntry->addValue(myComboEntry->initialValue());

  TextStyleCollection &collection = TextStyleCollection::instance();
  const int STYLES_NUMBER = 32;
  TextKind styles[STYLES_NUMBER] = { REGULAR, TITLE, SECTION_TITLE, SUBTITLE, H1, H2, H3, H4, H5, H6, CONTENTS_TABLE_ENTRY, RECENT_BOOK_LIST, LIBRARY_AUTHOR_ENTRY, LIBRARY_BOOK_ENTRY, ANNOTATION, EPIGRAPH, AUTHOR, DATE, POEM_TITLE, STANZA, VERSE, CITE, HYPERLINK, FOOTNOTE, ITALIC, EMPHASIS, BOLD, STRONG, DEFINITION, DEFINITION_DESCRIPTION, PREFORMATTED, CODE };
  for (int i = 0; i < STYLES_NUMBER; ++i) {
    const TextStyleDecoration *decoration = collection.decoration(styles[i]);
    if (decoration != 0) {
      myComboEntry->addValue(decoration->name());
    }
  }
  dialogTab.addOption(myComboEntry);

  {
    const std::string &name = myComboEntry->initialValue();
    BaseTextStyle &baseStyle = collection.baseStyle();

    registerEntries(dialogTab,
      new FontFamilyOptionEntry(baseStyle.FontFamilyOption, context, false),
      new ZLSimpleBooleanOptionEntry(BOLD_STRING, baseStyle.BoldOption),
      name
    );

    registerEntries(dialogTab,
      new ZLSimpleSpinOptionEntry("Size", baseStyle.FontSizeOption, 2),
      new ZLSimpleBooleanOptionEntry(ITALIC_STRING, baseStyle.ItalicOption),
      name
    );

    registerEntry(dialogTab,
      new ZLSimpleBooleanOptionEntry("Auto Hyphenations", baseStyle.AutoHyphenationOption),
      name
    );
  }

  for (int i = 0; i < STYLES_NUMBER; ++i) {
    TextStyleDecoration *decoration = collection.decoration(styles[i]);
    if (decoration != 0) {
      const std::string &name = decoration->name();

      registerEntries(dialogTab,
        new FontFamilyOptionEntry(decoration->FontFamilyOption, context, true),
        new ZLSimpleBoolean3OptionEntry(BOLD_STRING, decoration->BoldOption),
        name
      );

      registerEntries(dialogTab,
        new ZLSimpleSpinOptionEntry("Size Difference", decoration->FontSizeDeltaOption, 2),
        new ZLSimpleBoolean3OptionEntry(ITALIC_STRING, decoration->ItalicOption),
        name
      );

      registerEntries(dialogTab,
        new ZLSimpleBoolean3OptionEntry("Allow Hyphenations", decoration->AllowHyphenationsOption),
        0,
        name
      );
    }
  }

  myComboEntry->onValueChange(myComboEntry->initialValue());
}