mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
145 lines
3.1 KiB
C++
145 lines
3.1 KiB
C++
#include "RichEdit.h"
|
|
|
|
namespace Upp {
|
|
|
|
class StyleKeysDlg : public WithStyleKeysLayout<TopWindow> {
|
|
typedef StyleKeysDlg CLASSNAME;
|
|
|
|
Array<DropList> style;
|
|
Array<DropList> face;
|
|
Array<DropList> height;
|
|
Array<ColorPusher> ink;
|
|
Array<ColorPusher> paper;
|
|
|
|
public:
|
|
void Init(const RichEdit& edit, RichEdit::StyleKey *key);
|
|
void Retrieve(RichEdit::StyleKey *k);
|
|
|
|
StyleKeysDlg();
|
|
};
|
|
|
|
StyleKeysDlg::StyleKeysDlg()
|
|
{
|
|
CtrlLayoutOKCancel(*this, "Styling keys");
|
|
|
|
list.AddColumn("Key");
|
|
list.AddColumn("Paragraph style");
|
|
list.AddColumn("Font");
|
|
list.AddColumn("Height");
|
|
list.AddColumn("Ink");
|
|
list.AddColumn("Paper");
|
|
list.SetLineCy(EditField::GetStdHeight() + 4);
|
|
list.NoHorzGrid().EvenRowColor().NoCursor();
|
|
list.ColumnWidths("117 160 160 75 90 90");
|
|
}
|
|
|
|
void StyleKeysDlg::Init(const RichEdit& edit, RichEdit::StyleKey *key)
|
|
{
|
|
const RichText& text = edit.text;
|
|
for(int i = 0; i < 20; i++) {
|
|
RichEdit::StyleKey& k = key[i];
|
|
list.Add((i >= 10 ? "Shift+Alt+" : "Alt+") + AsString(i % 10));
|
|
|
|
DropList& st = style.At(i);
|
|
st.Add(Null);
|
|
const RichStyles& ts = text.GetStyles();
|
|
for(int j = 0; j < ts.GetCount(); j++) {
|
|
st.Add(ts.GetKey(j), ts[j].name);
|
|
}
|
|
if(st.FindKey(k.styleid) < 0)
|
|
st.Add(k.styleid, k.stylename);
|
|
st <<= k.styleid;
|
|
list.SetCtrl(i, 1, st, false);
|
|
|
|
DropList& fc = face.At(i);
|
|
fc.Add(Null);
|
|
for(int j = 0; j < edit.face.GetCount(); j++)
|
|
fc.Add(Font::GetFaceName(edit.face.GetKey(j)));
|
|
if(fc.Find(k.face) < 0)
|
|
fc.Add(k.face);
|
|
fc <<= k.face;
|
|
list.SetCtrl(i, 2, fc, false);
|
|
|
|
DropList& hg = height.At(i);
|
|
hg.Add(Null);
|
|
for(int j = 0; j < edit.height.GetCount(); j++)
|
|
hg.Add(edit.height.Get(j));
|
|
if(hg.Find(k.face) < 0)
|
|
hg.Add(k.face);
|
|
list.SetCtrl(i, 3, hg, false);
|
|
|
|
ColorPusher& n = ink.At(i);
|
|
n.NullText("");
|
|
n <<= k.ink;
|
|
list.SetCtrl(i, 4, n, false);
|
|
|
|
ColorPusher& p = paper.At(i);
|
|
p.NullText("");
|
|
p <<= k.paper;
|
|
list.SetCtrl(i, 5, p, false);
|
|
}
|
|
}
|
|
|
|
void StyleKeysDlg::Retrieve(RichEdit::StyleKey *key)
|
|
{
|
|
for(int i = 0; i < 20; i++) {
|
|
RichEdit::StyleKey& k = key[i];
|
|
k.styleid = ~style[i];
|
|
k.stylename = style[i].GetValue();
|
|
k.face = ~face[i];
|
|
k.height = ~height[i];
|
|
k.ink = ~ink[i];
|
|
k.paper = ~paper[i];
|
|
}
|
|
}
|
|
|
|
void RichEdit::StyleKeys()
|
|
{
|
|
StyleKeysDlg dlg;
|
|
dlg.Init(*this, stylekey);
|
|
if(dlg.Run() == IDOK)
|
|
dlg.Retrieve(stylekey);
|
|
}
|
|
|
|
void RichEdit::ApplyStyleKey(int i)
|
|
{
|
|
if(i < 0 || i >= 20)
|
|
return;
|
|
const StyleKey& k = stylekey[i];
|
|
if(!IsNull(k.styleid)) {
|
|
int q = style.FindKey(k.styleid);
|
|
if(q >= 0) {
|
|
style.SetIndex(q);
|
|
Style();
|
|
}
|
|
}
|
|
if(!IsNull(k.face)) {
|
|
int q = face.FindValue(k.face);
|
|
if(q >= 0) {
|
|
face.SetIndex(q);
|
|
SetFace();
|
|
}
|
|
}
|
|
if(!IsNull(k.height)) {
|
|
height <<= k.height;
|
|
SetHeight();
|
|
}
|
|
if(!IsNull(k.ink)) {
|
|
ink <<= k.ink;
|
|
SetInk();
|
|
}
|
|
if(!IsNull(k.paper)) {
|
|
paper <<= k.paper;
|
|
SetPaper();
|
|
}
|
|
}
|
|
|
|
RichEdit::StyleKey::StyleKey()
|
|
{
|
|
styleid = Null;
|
|
height = Null;
|
|
ink = Null;
|
|
paper = Null;
|
|
}
|
|
|
|
}
|