Moved to ../samples/rtfedit.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2687 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
6c11b52650
commit
25dbfc255b
@ -1,2 +0,0 @@
|
|||||||
Linux
|
|
||||||
linux-gnu
|
|
@ -1,309 +0,0 @@
|
|||||||
/* XPM */
|
|
||||||
static char *Micon_xpm[] = {
|
|
||||||
/* width height num_colors chars_per_pixel */
|
|
||||||
" 64 48 254 2",
|
|
||||||
/* colors */
|
|
||||||
".. c #040207",
|
|
||||||
".# c #6482b4",
|
|
||||||
".a c #2a4471",
|
|
||||||
".b c #9cc2d4",
|
|
||||||
".c c #4c627f",
|
|
||||||
".d c #94918e",
|
|
||||||
".e c #0c243e",
|
|
||||||
".f c #4c4a4a",
|
|
||||||
".g c #3c63a8",
|
|
||||||
".h c #7ca2ac",
|
|
||||||
".i c #24447e",
|
|
||||||
".j c #2c2c2c",
|
|
||||||
".k c #5482cc",
|
|
||||||
".l c #d4d0d0",
|
|
||||||
".m c #99aab7",
|
|
||||||
".n c #5c74b1",
|
|
||||||
".o c #2c5287",
|
|
||||||
".p c #1a2a4d",
|
|
||||||
".q c #acdefc",
|
|
||||||
".r c #646362",
|
|
||||||
".s c #7491d0",
|
|
||||||
".t c #bcc4bf",
|
|
||||||
".u c #5273aa",
|
|
||||||
".v c #b4b1aa",
|
|
||||||
".w c #3d5583",
|
|
||||||
".x c #828482",
|
|
||||||
".y c #8c9490",
|
|
||||||
".z c #6f7369",
|
|
||||||
".A c #1c365c",
|
|
||||||
".B c #041220",
|
|
||||||
".C c #2c325c",
|
|
||||||
".D c #94b6e4",
|
|
||||||
".E c #3e4242",
|
|
||||||
".F c #648edc",
|
|
||||||
".G c #d4f2fc",
|
|
||||||
".H c #cbd3d1",
|
|
||||||
".I c #3c54a1",
|
|
||||||
".J c #243244",
|
|
||||||
".K c #4c69aa",
|
|
||||||
".L c #7c8ba2",
|
|
||||||
".M c #4c5d84",
|
|
||||||
".N c #34497f",
|
|
||||||
".O c #1c2228",
|
|
||||||
".P c #6484c5",
|
|
||||||
".Q c #6a7788",
|
|
||||||
".R c #9ba09b",
|
|
||||||
".S c #2c3634",
|
|
||||||
".T c #acb6b4",
|
|
||||||
".U c #141517",
|
|
||||||
".V c #a0c4e8",
|
|
||||||
".W c #515753",
|
|
||||||
".X c #5c76cc",
|
|
||||||
".Y c #1b2f51",
|
|
||||||
".Z c #4472c4",
|
|
||||||
".0 c #7c8a88",
|
|
||||||
".1 c #5a6262",
|
|
||||||
".2 c #a4aba6",
|
|
||||||
".3 c #bcc8d5",
|
|
||||||
".4 c #7494df",
|
|
||||||
".5 c #84b2d4",
|
|
||||||
".6 c #6784d9",
|
|
||||||
".7 c #acd3e4",
|
|
||||||
".8 c #304b72",
|
|
||||||
".9 c #2c4c81",
|
|
||||||
"#. c #3c5b93",
|
|
||||||
"## c #5468bc",
|
|
||||||
"#a c #b5bbb0",
|
|
||||||
"#b c #1c3765",
|
|
||||||
"#c c #444e44",
|
|
||||||
"#d c #ecece8",
|
|
||||||
"#e c #7ca3dc",
|
|
||||||
"#f c #d4deda",
|
|
||||||
"#g c #345495",
|
|
||||||
"#h c #1c2641",
|
|
||||||
"#i c #94a6cc",
|
|
||||||
"#j c #243252",
|
|
||||||
"#k c #a7acb5",
|
|
||||||
"#l c #5c7ab3",
|
|
||||||
"#m c #0a152d",
|
|
||||||
"#n c #c4def0",
|
|
||||||
"#o c #686e84",
|
|
||||||
"#p c #a4a19e",
|
|
||||||
"#q c #3e3c3a",
|
|
||||||
"#r c #84aaee",
|
|
||||||
"#s c #040a09",
|
|
||||||
"#t c #3c6294",
|
|
||||||
"#u c #7c929c",
|
|
||||||
"#v c #3c5c9d",
|
|
||||||
"#w c #4e6ead",
|
|
||||||
"#x c #344458",
|
|
||||||
"#y c #446bae",
|
|
||||||
"#z c #696b6a",
|
|
||||||
"#A c #547cbc",
|
|
||||||
"#B c #789ae3",
|
|
||||||
"#C c #112a44",
|
|
||||||
"#D c #4f504b",
|
|
||||||
"#E c #2c3140",
|
|
||||||
"#F c #8c8688",
|
|
||||||
"#G c #5e5c5c",
|
|
||||||
"#H c #8c8c80",
|
|
||||||
"#I c #cccccc",
|
|
||||||
"#J c #4c6398",
|
|
||||||
"#K c #c7cbc4",
|
|
||||||
"#L c #5174b8",
|
|
||||||
"#M c #3d558e",
|
|
||||||
"#N c #2c3c5f",
|
|
||||||
"#O c #acbad4",
|
|
||||||
"#P c #3f495a",
|
|
||||||
"#Q c #354e82",
|
|
||||||
"#R c #6a8ac7",
|
|
||||||
"#S c #767c84",
|
|
||||||
"#T c #30374b",
|
|
||||||
"#U c #b1c9e7",
|
|
||||||
"#V c #1b315d",
|
|
||||||
"#W c #537bcb",
|
|
||||||
"#X c #c4bec0",
|
|
||||||
"#Y c #243e6a",
|
|
||||||
"#Z c #969892",
|
|
||||||
"#0 c #7e858e",
|
|
||||||
"#1 c #94b3f1",
|
|
||||||
"#2 c #c2d4e8",
|
|
||||||
"#3 c #141e35",
|
|
||||||
"#4 c #acb2ac",
|
|
||||||
"#5 c #c4ced0",
|
|
||||||
"#6 c #2b4d8e",
|
|
||||||
"#7 c #445ca2",
|
|
||||||
"#8 c #2c3e6f",
|
|
||||||
"#9 c #14243e",
|
|
||||||
"a. c #f1fdfa",
|
|
||||||
"a# c #8c9abc",
|
|
||||||
"aa c #d7f9f9",
|
|
||||||
"ab c #5a697e",
|
|
||||||
"ac c #c7ebf7",
|
|
||||||
"ad c #bceefc",
|
|
||||||
"ae c #b4c2b4",
|
|
||||||
"af c #889cf0",
|
|
||||||
"ag c #d8d6c8",
|
|
||||||
"ah c #748598",
|
|
||||||
"ai c #b4d2fc",
|
|
||||||
"aj c #4c5eb0",
|
|
||||||
"ak c #3f4f64",
|
|
||||||
"al c #8492bc",
|
|
||||||
"am c #161d1e",
|
|
||||||
"an c #5d7dcf",
|
|
||||||
"ao c #5c86d6",
|
|
||||||
"ap c #9cacc8",
|
|
||||||
"aq c #6c92e6",
|
|
||||||
"ar c #e4ecec",
|
|
||||||
"as c #89b7ef",
|
|
||||||
"at c #a6d0f8",
|
|
||||||
"au c #e4e2e0",
|
|
||||||
"av c #8c98a4",
|
|
||||||
"aw c #ccdaec",
|
|
||||||
"ax c #94bee4",
|
|
||||||
"ay c #232b2b",
|
|
||||||
"az c #1c2b43",
|
|
||||||
"aA c #0c1c33",
|
|
||||||
"aB c #99bcf7",
|
|
||||||
"aC c #6c72bc",
|
|
||||||
"aD c #7c766c",
|
|
||||||
"aE c #a4a2b4",
|
|
||||||
"aF c #6c7eac",
|
|
||||||
"aG c #e4d6dc",
|
|
||||||
"aH c #e4fefc",
|
|
||||||
"aI c #84aeb4",
|
|
||||||
"aJ c #b4b6bf",
|
|
||||||
"aK c #345b9b",
|
|
||||||
"aL c #bce2ef",
|
|
||||||
"aM c #ccc6bc",
|
|
||||||
"aN c #82a3ef",
|
|
||||||
"aO c #7c7b77",
|
|
||||||
"aP c #040c1e",
|
|
||||||
"aQ c #6c7e94",
|
|
||||||
"aR c #9ca69c",
|
|
||||||
"aS c #acbebc",
|
|
||||||
"aT c #a2cafa",
|
|
||||||
"aU c #545e5f",
|
|
||||||
"aV c #5c6a74",
|
|
||||||
"aW c #cae6ee",
|
|
||||||
"aX c #5c6e7c",
|
|
||||||
"aY c #5474c6",
|
|
||||||
"aZ c #fcfaf4",
|
|
||||||
"a0 c #344672",
|
|
||||||
"a1 c #446ec4",
|
|
||||||
"a2 c #b4c4d4",
|
|
||||||
"a3 c #313231",
|
|
||||||
"a4 c #9cb2b4",
|
|
||||||
"a5 c #345a8c",
|
|
||||||
"a6 c #7496d4",
|
|
||||||
"a7 c #0c1a24",
|
|
||||||
"a8 c #444a47",
|
|
||||||
"a9 c #343e3c",
|
|
||||||
"b. c #dce6e4",
|
|
||||||
"b# c #a9b2bc",
|
|
||||||
"ba c #a6a6a3",
|
|
||||||
"bb c #446a9c",
|
|
||||||
"bc c #c4f2f8",
|
|
||||||
"bd c #445667",
|
|
||||||
"be c #727475",
|
|
||||||
"bf c #6a7896",
|
|
||||||
"bg c #9aa0a7",
|
|
||||||
"bh c #9ec4fa",
|
|
||||||
"bi c #545a61",
|
|
||||||
"bj c #6474e0",
|
|
||||||
"bk c #546674",
|
|
||||||
"bl c #b8bcbd",
|
|
||||||
"bm c #5d7cbf",
|
|
||||||
"bn c #515255",
|
|
||||||
"bo c #979a9f",
|
|
||||||
"bp c #849cd0",
|
|
||||||
"bq c #546a8f",
|
|
||||||
"br c #d7d8d5",
|
|
||||||
"bs c #688ada",
|
|
||||||
"bt c #4f6ebe",
|
|
||||||
"bu c #343e4c",
|
|
||||||
"bv c #dafefc",
|
|
||||||
"bw c #acd6fc",
|
|
||||||
"bx c #b4b6b0",
|
|
||||||
"by c #8c9a94",
|
|
||||||
"bz c #203a44",
|
|
||||||
"bA c #a4b6c8",
|
|
||||||
"bB c #4c6a98",
|
|
||||||
"bC c #040214",
|
|
||||||
"bD c #5c74be",
|
|
||||||
"bE c #4c5c98",
|
|
||||||
"bF c #24325c",
|
|
||||||
"bG c #8c8c8f",
|
|
||||||
"bH c #4464a7",
|
|
||||||
"bI c #2c457e",
|
|
||||||
"bJ c #5c83c7",
|
|
||||||
"bK c #34538a",
|
|
||||||
"bL c #b4dff1",
|
|
||||||
"bM c #7c92d4",
|
|
||||||
"bN c #c4c4c0",
|
|
||||||
"bO c #243759",
|
|
||||||
"bP c #0c151e",
|
|
||||||
"bQ c #9cb2d4",
|
|
||||||
"bR c #6c8fd3",
|
|
||||||
"bS c #546aab",
|
|
||||||
"bT c #848c9f",
|
|
||||||
"bU c #242420",
|
|
||||||
"bV c #6c83c0",
|
|
||||||
"bW c #343935",
|
|
||||||
"bX c #848b89",
|
|
||||||
"bY c #acaca6",
|
|
||||||
"bZ c #c4cad0",
|
|
||||||
"b0 c #445c90",
|
|
||||||
"b1 c #243865",
|
|
||||||
"b2 c #dce0dc",
|
|
||||||
"b3 c #747b76",
|
|
||||||
"b4 c #8cacee",
|
|
||||||
"b5 c #0c0c08",
|
|
||||||
"b6 c #446299",
|
|
||||||
"b7 c #8493a4",
|
|
||||||
/* pixels */
|
|
||||||
"................................................................................................................................",
|
|
||||||
"..................................bC....bC....bC..bC....bC..bCbCbCbC..bCbC..bC..bC..bC..bCbC..bC..bC....bC....bC................",
|
|
||||||
"..#9#C#h#C.p.Y.Y.Y#j.Y.Y.Y#V#V#Vb1bFb1b1#8#Y.a.a#Q#Q.a.N#Q.abI.i.9bI#Q#MbK#M.wb0#M.9.N.N.N.9.abI.a#Y#Yb1b1#b#bb1b1b1#V#V#V#Vaz..",
|
|
||||||
"..#h#C.p.p#9.Y.Y#j.AbObO.A.AbO.Ab1#Y#Y#8.a.aa0.N.8.w.w#QbK.w.ibI.9#6#Q#.#Mb0b0#J#MbK#M.NbK.N.9.NbI.N#YbIb1#Y#8#8bOb1bO#j#V#Caz..",
|
|
||||||
"..#9.e#h#C.p.p.Y.YbO.A#b#N.a#8#Y#bb1#8#Y.Na0.9.8#Q.w.Mb0#Q#MbK.9bK#g#6.Kb6#J#J#wb0#M#MbKbK#Q#M.9bI.N.N.a.N.a.a.ab1b1#V.Y#V.Y.Y..",
|
|
||||||
"..#9#C.p#h.p.p.p.Y#VbO#b.a.ia0.9#Q.N#YbI.a.N.N.N.w#Q.wb6b6b0b6#.#g#v#M.K#w#L.n.n#vbH#.bH.Ib6aK#MbK.9#Q#Q#Q#Q.a#Yb1.AbF#VbO.Y#j..",
|
|
||||||
"..#h#h.p.p.p.Y.p#bbF#bb1#Y.a.8.N#Q#M#M#Q.N.9#QbK#M#Mb0b0.ubB.K.K#..K#v#w.nbmbV.nbHbS#w#7#w#vb0#.#M#Mb0#M#Q.9#Y#Yb1#Yb1b1.Y.Y.Y..",
|
|
||||||
"..#h#9.p.p.p#V#V#b#b#Y#Y.a.ibI.N.w#Mb0b6#7#M#Q#QbK#.b6b6bq#l.n#LbHbH#y#L#R.s.4#AaY#w#w#L.K.KbH.g.KbH#v#M.9bI.i.8.a#Yb1.A.A.A#j..",
|
|
||||||
"..#h#C.p.p.Y#V#V#bb1.abIbI#6.o.o#g.oaK#tbH.K.KbH#M.Iaj.K#w.n#R.P#Rbt#W#W.4bpb4aoanbsaobm#La1#L#A#L.ga5bK#g#g#Q.8#Y#bb1b1bOb1bO..",
|
|
||||||
"...p.p.Y#V.Y#V.Ab1#YbI.9#Q#Q#M#M#7#7#M#v.M#J.K.K.nbS#MbH.nbm.#b4.s#Baq#Wb4aB#1aqaq#R.P.##l#RbmbD.K#7#J#J#.#Q.9.i.N.a#Y#Yb1.Aaz..",
|
|
||||||
"..az#C#V#j#V.A#N#8.N.N.ibObz#T.J#E.J#T#Tbu.Y.8#..K.nbVbD#wbm.4a6aTb4aoaNaTaiasaNa6.n.m.3bZ#2bN.3aR#2#2.3#J#Q#MbK.8.a#8#b.AbO#j..",
|
|
||||||
"..#h.p.p.Y.Yb1bO.ibI#g#Mbd#hambU.jbW.Sa3aybP.Y.9bHbH.ubm#BbM.P#rbhbc.qasbL.G.VbhaBbpbZaJbobxbl#I#a#abXbP#V.9#6.NbI#8#8#bbF#V#j..",
|
|
||||||
"..az#C.Y.Y.Y#bb1.abI#Q.oaj#Pa3a3aya3a3bW.Eayb0.K.g#y.K#LanbRbhaTaxbLbvbLbvbvaLadaTai.mbobYba#Xbl.H#I#P#m#.#M#QbIbI#Y#Yb1#b#V#j..",
|
|
||||||
"..az.p.p#VbObO#Y.a.N#g#g.I#xbW.j.ja3.E.Ebnbib0bmananbm#wanbs.4asacbLbvaHa.aHbvbc.7aIbY#p#pblbl#Kbe#F#k#9#..I#g#6.i#8#8b1b1.A#j..",
|
|
||||||
"..#h#C.p.YbO#bb1a0bIbKbK#7#xaya3.jaya3#q.Wbn.J.wbD#Lbm.X#Bb4bhat.b#na.a.a.aZaHaHaW#k#a.vagbNaObl#I.vb3#3#w.K#7#v#M#QbIa0#Y#N#N..",
|
|
||||||
"..#haz.p#V.YbO#Y#Y.N.9#g#7#P.EbUa8#q#D.f.f.fbi#hbB#LaY.n.P#R#e.5.7aLa.a.aZaZa.a.aS#5#p.d#p.t.l.HbYaObo.Y#w.Kb6#.#M.Na0.a#8#NbO..",
|
|
||||||
"..#h#C.YbO#V#N#Y.8#Q#g#t##ak.j.W.f.Wbn#Gbe#zbnaU.M#Ra6#eaNb4bh.7bLaWa.aZaZaZa.br.H.2ba.H.T#fau.H.H#p.x#3#w.K#tb0#Q#Q.a#8#Nb1bO..",
|
|
||||||
"..az#j#j.Ab1#N.a.8#Q#.bb##ak.Ebnbn.1.Ua8.zaO#z.xbubqbsbR.saqaN#1bw.7aaaHa.b.a.a4bZ#k#dbgbP.H#IbG#4bY#o#9#w.K#7b0#Q.8.a#8#NbObO..",
|
|
||||||
"..az#j.Y.YbO#8.a.8#Q#7#t##bd.r#D#D.rbPaV#G#z.x.y#z.p.u#W.6#B#r#eaTaTaLaWaaaI#5#aau#XbraU#8.HbN.T.RbY#0#9#w.Kb6#M#Q#Qa0#Y#Y#N#N..",
|
|
||||||
"..#h#j.YbOb1bO#Ya0.NbKa5aj.c.f#G#z.1#3.Mbe#zaO.x#pbT#.bmbsbs.F#1#easat.Gbc.hb.b2aragbgbPaC.3#k.v#4babe#9.KbH#7b0#Qak.a.i#N#Y#T..",
|
|
||||||
"..az.Y#j.Y.Ab1#Y.8.N#gbK.IaX.r.raDaV.Bb0bfbeb3bab3#HazbBaYbsaqbRaf#1.DaB#na2#K#4b3.ybC.Yaf#k#Z.y.d#p#S#3#v#7#M#g.N.N.a#N#Y#NbO..",
|
|
||||||
"..#h.p#C#jbFbO#8.a.NbK#.#7bk.z.zb3#H#9aKbm#J.y#Hbablb#.e.PaqbmbsaNaN#1aB#2bZ.x.2aub3.AbSbjapbobobo.rbn#9#v#gbK.9bI.a.a#Yb1bObO..",
|
|
||||||
"..#haz.YbF#VbO#Y.abI#QaK.I.Q.z.WaO#za7b0an.ub#.R.y.R#XbXbEbtbJbR#Bbsb4.D.3.v#p#za3#s.ubJbj#u.WbWb3.Rbe#9#v#v#g.9bI#Yb1b1#b.A#j..",
|
|
||||||
"..#h#C.p#C.Y#bbO#YbI.9.o.Iab#Zb3.x.da7bK#WbmalbTae.t#F#Gaz.nbsaqbJ.6#R#U#aaMbx#KbPbz#laoanb#ba.2.RbG#G#9#v#v#g.9bI.ab1#bbF#Vaz..",
|
|
||||||
"..#haz.p.p#V#Vb1#Y.a#6bK#7bk.1#z#Z.y#m#.a1a1bq.LbX#HblbN.3#N.PaobJafbQ.3.tblbx.TazbB.X.kaYb7bG.d.x#ZaV#3bH#v#Q.NbI#8b1b1.A.Y.Y..",
|
|
||||||
"..az#h#C.p#VbO#b#YbIbK#g#7aQ.d.y.RbX#mbK#y#ybt.#bZ#IaM.l.2bdbmanaobMap.t.2bY.2.ObO.s.X#W.6bX#F.yaOaD#G#9b6#7.I#Q.a.ab1#bbF.Y.Y..",
|
|
||||||
"..#9#h.p.p#V#Vb1.a.NbK#..IaQ.xbob3aO#m.9#L.ZaY#w#iaJagaGbr#5.8aF.4a#blbN#Z#Z.WaP#l#l.6#WaY#0aO.y.xb3#PaA#7b6bK#QbI#8b1bO.A#V.Y..",
|
|
||||||
"..#h.p#C#V.YbO#Y.abI.9aK.Ibf#D.1bYbY#mbK#ybt#ybHbSbT#aba.tbx#S.M#B.y#kbxbYbYaP.YbR#A.6bmbt.Lb3#z.W#Dbn#3bK#.#M#Q.N#Yb1b1#V.Yaz..",
|
|
||||||
"..#h#C.p#V.p#b.A.a#Y#Q#..Ib7#kbe#4#pa7bK#ybH.g.gbHbfbZbN#4bNbgakah#Zbg#F.x.1#9bK.P#A.X.#btbTaO.W.r.ra8.e#Q.o#Q#Q.a.ab1bO.A.Yaz..",
|
|
||||||
"..#h.p#h#C#VbOb1#YbI.9.o.I.L#H#Z.2.vaA#QbHaK.g.g#y#7#nbr#a.H.vaE.zaU#4blbebCbIaK#Lbm#LbJbtaXaO.z#z#G.EaA#g#Q.9bI.a.a#Nb1#jbO.Y..",
|
|
||||||
"..#h#C#h#V.p#V.A.a#8.9.9.Iah#4bY#4bGbP#QaKaKaKaK#7#wbEbg.z.zay.E#a#K.2#ZbCbO#v#gbH.Xbb.ubDbk#z.r#c.f.E#9#Q#6bI.i#8b1#YbO.AbO.J..",
|
|
||||||
"..#h.p#9.p.p#b.A#8#Y.9.9.I.0.R.2bN#XbP.NaK.IaK#v.IbS.KaQaR.Wbl#K.RbY.R.y#9#M#gaKbH.Kbb#yaCbk.r#Ga8#D#TaAbK#6.i.a#Y#bbObO.Y#jaz..",
|
|
||||||
"..#9#9.p.p.Y#V.Ab1#YbI.9#7a#bn.Hb2#FaP.a.I#g#g#g#v#7bHb0.L.HbY.y.0#ZaObC.8b0#g#6aKbH#wbb#LaX#D#q.Ea3.UaAbK#QbI#Y#Y#bbO.AbO.Y.Y..",
|
|
||||||
"..#9#h#h#C.p.Y#V#Y#Y#6.obEbk.H.2bUbe#m.a#g#g#Q#M#M#vaK#6bq#k.d.x.y#Z..az#M#v.o#6.o#v#L#tbSbda8bU.Ub5.O#3#6#6bI.ib1#bbF.Y#C.Yaz..",
|
|
||||||
"..#9#9.p.p.p#Vb1#Y.N#6.o#Q#O.R.xaM.HaPa0bK#Q#Q#M#M#MbK#gb0akb3aO.xbX#9#x#v#g.N#6.9.wbH#yb0bn#D.f#q.j.U#3.N#6#8.i#b#b.Y.p.Y.paz..",
|
|
||||||
"..#9#h#9.p.p#V#bb1#8bI#g.NbAb.br.t#H#m#Y#Q#g#Q.9.9.N#6.o#gb0avbG#Z...Y.w#g#6bIbIbIbK#v.K#Ma7#s#s....#haA#Q.NbI#Yb1#V#V#V.p.paz..",
|
|
||||||
"..#9#9#9.p.p#VbO#Y#8#6.i#M.Q#z.H#f#K.B#Y#6.9.N.9bIbI.9.9#M#M#JbybP.B.Nb0.NbIbI#Y.ibI#vbH.wbubW.E.Sa3a7#m.o#Q#Y#Yb1#V#V#C.p.p.e..",
|
|
||||||
"..#3#9#9#9.Y#V#VbF#Y#8#6ak#O#db2br.HaP#N.N#QbIbI.a#Y.i.8#M#Qa0.L.B.p#Q#Q.i.i.i#Y.ibI#Q#..c.E.ja3a3bWambP.N.9#Y#Y#b#b#V.p.p.p#9..",
|
|
||||||
"..#3.e#9.p.p.Y.Yb1b1#Y#.#Ubgbl.T#S..aw#obI.a.a#8#Y#Y.a#YbI.Na0.8bO#8a0#Qa0#8b1#Y#Y#8#Q.ibO#Ta9a9bWa3ay#Eb1.a.ab1#V#V.Y.p.p.e#9..",
|
|
||||||
"..#3#9.p#h#C.p.Y#Vb1#b#V.a.Y.Y.Y#CazbO.eb1#8#Y#b#bb1b1#8bI#Y.8.abIb1#Y.Nb1#Y#Y#Y#b#Y.9.8.8.C.JbO#j.Yaz#C.p.Y#bb1#V.p.p.p#C.e#9..",
|
|
||||||
"..#9#9#9.p#9.p.Y.Y#V#b#bb1#8.i#8.a.a#Y#Y#Y#Yb1b1#b#bb1#N#Y#8b1#Y#Yb1#8#Yb1#b#b#b#bb1#Y.N.w.8.N.8#Q.8.i.a#b#Y#bbO#V.Y.p#C.p.p#9..",
|
|
||||||
"..#3#9.e#9.p.p#9#C.Y#V#b#b#b#Y#Y#Y#Y#Y#Yb1b1bO#V.Y#j#Vb1b1bObObObO.Ab1#N.A.AbF#V#V#V#b#8.aa0.a.ibI.8#Y#Yb1#V#V#V#V.p.p#9.p.e#9..",
|
|
||||||
"..#3#3#9.e.e.p.p.p.p#V.Y#b#b#Vb1#b#Yb1.A#V.Y.Y.Y.Y.Y.A#j.YbO#VbO.Y#jbO#b#j#j#V.Y#V#V#bb1#Y.a#Yb1.a#8b1b1#b.A#V#C.p.p.p.p.e.e#9..",
|
|
||||||
"..#3aAaA#3#9.e.e#9#C#C.Y.p.Y#V#VbF#VbO.Y#j.p.p.Y#C#j.Y#j.Y#j.Y#j.Y.YbO.Y#j.Y.p.p.p.p.Y#VbOb1#NbObOb1b1.A#V.p.p.p#C.p#9#9#9.e#9..",
|
|
||||||
"..#3#9.e#3aA#9.e#9.p.p.e.p.p.p#V#j.Y.Y.Y#9.p.p#9.Yaz.Yaz.paz.Y.paz.Y.Y#j#C.p#C.p#C#C.p#V#VbO#VbF#V#j#V#j.p.p.p#C.p#9#C#C#9.e#9..",
|
|
||||||
"..#3aA#9aA#9aA.e#9.e#9#9.p.p.p.p#Caz.Y#C.p.p#9.p#C#Caz.p#Caz.Y#C.p#9#j.p#h.p#C#C#C.e.p#9.Y#j.Y.Y.p.p.p#C.p.p#9#9#9#9#9.e#9.e#3..",
|
|
||||||
"..#3.e#3.e#3.e#9#9aA#9.e.e.e.p#C.p#h#Caz#9.p.p.p#h.Y#9.p.p#C.paz.p#h.Yaz#9.p#C.e.e.e.p.p#9.p.paz#C.paz.Y#9.p.e#9.e#9#9#9#9aA#9..",
|
|
||||||
"......bC..bC..bCbCbCbCbCbCbC..bC....bC..bCbCbCbCbC..bC....bC......bC..bCbCbCbCbCbCbCbCbCbCbC....bC......bCbC..bC..bC..bC........"
|
|
||||||
};
|
|
@ -1,8 +0,0 @@
|
|||||||
/*
|
|
||||||
This is an empty Mpch.h file to allow me to move the
|
|
||||||
wxl* files between Mahogany and the wxLayout sample
|
|
||||||
without modifying them.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// static int _mpch_dummy = 0;
|
|
||||||
|
|
@ -1,50 +0,0 @@
|
|||||||
|
|
||||||
README for wxLayout classes
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
All the source in this directory is copyrighted under the
|
|
||||||
GPL (GNU GENERAL PUBLIC LICENSE), version 2,
|
|
||||||
by Karsten Ballueder <ballueder@usa.net>.
|
|
||||||
|
|
||||||
|
|
||||||
This is still work in progress, so if you want to make any significant
|
|
||||||
changes, please get in touch with me before.
|
|
||||||
|
|
||||||
There are three building blocks for rich text editing:
|
|
||||||
|
|
||||||
wxllist :
|
|
||||||
|
|
||||||
The wxLayoutList layout engine. It is a linked list of wxLayoutObjects
|
|
||||||
which can arrange and display them on any wxDC. I am trying to keep
|
|
||||||
this class as simple as possible, to be just the core layout
|
|
||||||
engine. All "convenience" functions should be defined in classes built
|
|
||||||
on top of this.
|
|
||||||
The wxLayoutList is derived from kbList, a double-linked list with an
|
|
||||||
interface modelled after the STL list. As wxLayoutList depends on the
|
|
||||||
way kbList treats iterators (i.e. the iterator value after an insert()
|
|
||||||
or erase() operation), I don't feel like rewriting it for wxList.
|
|
||||||
|
|
||||||
wxlwindow :
|
|
||||||
|
|
||||||
Contains a class wxLayoutWindow, derived from wxScrolledWindow which
|
|
||||||
can directly be used as a rich-text display or editing window. The
|
|
||||||
function responsible for keyboard handling is virtual and can be
|
|
||||||
overloaded for different keybindings. wxLayoutWindow can sent fake
|
|
||||||
menu-events to the application to react to the user clicking on
|
|
||||||
objects.
|
|
||||||
|
|
||||||
wxlparser:
|
|
||||||
|
|
||||||
Contains several high level functions operating on
|
|
||||||
wxLayoutList. Currently implemented is inserting of text (including
|
|
||||||
linebreaks) and export of objects, text or html.
|
|
||||||
Planned for the future is an html parser for importing html.
|
|
||||||
|
|
||||||
|
|
||||||
wxLayout.cpp is a simple test program. It will export Text and HTML to
|
|
||||||
stdout and demonstrate some of the features and bugs of wxLayoutList.
|
|
||||||
|
|
||||||
There are still things to do and I'm working on them. :-)
|
|
||||||
|
|
||||||
Karsten Ballueder <Ballueder@usa.ne> 29 June 1998
|
|
||||||
|
|
@ -1,44 +0,0 @@
|
|||||||
|
|
||||||
BUGS
|
|
||||||
=====================================================================
|
|
||||||
|
|
||||||
- dmalloc shows duplicate deletion after merging two lines and
|
|
||||||
deleting the second half
|
|
||||||
|
|
||||||
- word wrap for objects with lots of non-space needs to search in positive
|
|
||||||
direction if begin of first object is reached
|
|
||||||
|
|
||||||
TODO
|
|
||||||
=====================================================================
|
|
||||||
|
|
||||||
|
|
||||||
- typedef wxCoords CoordType ??
|
|
||||||
|
|
||||||
- merge RecalulateXXX and Layout() into one
|
|
||||||
- remove UpdateCursorScreenCoords() which is no longer needed
|
|
||||||
|
|
||||||
- UNDO!!
|
|
||||||
- replacement of llist in window
|
|
||||||
- selection highlighting is a bit broken
|
|
||||||
Improve speed! (See layout problem below!)
|
|
||||||
|
|
||||||
- wxlwindow needs to shrink scrollbar range when window contents get removed
|
|
||||||
- When selecting with the mouse, scroll window if pointer is outside.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- The import of a private data object does not work yet, we need to get
|
|
||||||
the objects back from the string.
|
|
||||||
- Changing default settings in Clear() or changing/inserting/deleting
|
|
||||||
a wxLayoutObject needs to update the m_StyleInfo in all lines, only
|
|
||||||
then can we start using that one.
|
|
||||||
|
|
||||||
- update rectangle (needs support in wxllist and wxWindows)
|
|
||||||
--> needs a bit of fixing still
|
|
||||||
some code bits are commented out in wxlwindow.cpp
|
|
||||||
offset handling seems a bit dodgy, white shadow to top/left of cursor
|
|
||||||
|
|
||||||
- DragNDrop
|
|
||||||
|
|
||||||
- Update docs, do full rtf/html editing.
|
|
||||||
- Verify html export.
|
|
@ -1,336 +0,0 @@
|
|||||||
/*-*- c++ -*-********************************************************
|
|
||||||
* kbList.cc : a double linked list *
|
|
||||||
* *
|
|
||||||
* (C) 1998 by Karsten Ballüder (Ballueder@usa.net) *
|
|
||||||
* *
|
|
||||||
* $Id$ *
|
|
||||||
* *
|
|
||||||
* $Log$
|
|
||||||
* Revision 1.3 1998/11/19 20:34:50 KB
|
|
||||||
* fixes
|
|
||||||
*
|
|
||||||
* Revision 1.8 1998/09/23 08:57:27 KB
|
|
||||||
* changed deletion behaviour
|
|
||||||
*
|
|
||||||
* Revision 1.7 1998/08/16 21:21:29 VZ
|
|
||||||
*
|
|
||||||
* 1) fixed config file bug: it was never created (attempt to create ~/.M/config
|
|
||||||
* always failed, must mkdir("~/.M") first)
|
|
||||||
* 2) "redesign" of "Folder properties" dialog and bug corrected, small change to
|
|
||||||
* MInputBox (it was too wide)
|
|
||||||
* 3) bug in ProvFC when it didn't reckognize the books as being in the correct
|
|
||||||
* format (=> messages "can't reopen book") corrected
|
|
||||||
* 4) I tried to enhance MDialog_About(), but it didn't really work... oh well,
|
|
||||||
* I've never said I was an artist
|
|
||||||
*
|
|
||||||
* Revision 1.6 1998/07/08 11:56:56 KB
|
|
||||||
* M compiles and runs on Solaris 2.5/gcc 2.8/c-client gso
|
|
||||||
*
|
|
||||||
* Revision 1.5 1998/06/27 20:07:18 KB
|
|
||||||
* several bug fixes for kbList
|
|
||||||
* started adding my layout stuff
|
|
||||||
*
|
|
||||||
* Revision 1.1.1.1 1998/06/13 21:51:12 karsten
|
|
||||||
* initial code
|
|
||||||
*
|
|
||||||
* Revision 1.4 1998/05/24 14:48:00 KB
|
|
||||||
* lots of progress on Python, but cannot call functions yet
|
|
||||||
* kbList fixes again?
|
|
||||||
*
|
|
||||||
* Revision 1.3 1998/05/18 17:48:34 KB
|
|
||||||
* more list<>->kbList changes, fixes for wxXt, improved makefiles
|
|
||||||
*
|
|
||||||
* Revision 1.2 1998/05/14 16:39:31 VZ
|
|
||||||
*
|
|
||||||
* fixed SIGSEGV in ~kbList if the list is empty
|
|
||||||
*
|
|
||||||
* Revision 1.1 1998/05/13 19:02:11 KB
|
|
||||||
* added kbList, adapted MimeTypes for it, more python, new icons
|
|
||||||
*
|
|
||||||
*******************************************************************/
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
# pragma implementation "kbList.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "kbList.h"
|
|
||||||
|
|
||||||
|
|
||||||
kbListNode::kbListNode( void *ielement,
|
|
||||||
kbListNode *iprev,
|
|
||||||
kbListNode *inext)
|
|
||||||
{
|
|
||||||
next = inext;
|
|
||||||
prev = iprev;
|
|
||||||
if(prev)
|
|
||||||
prev->next = this;
|
|
||||||
if(next)
|
|
||||||
next->prev = this;
|
|
||||||
element = ielement;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbListNode::~kbListNode()
|
|
||||||
{
|
|
||||||
if(prev)
|
|
||||||
prev->next = next;
|
|
||||||
if(next)
|
|
||||||
next->prev = prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
kbList::iterator::iterator(kbListNode *n)
|
|
||||||
{
|
|
||||||
node = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
kbList::iterator::operator*()
|
|
||||||
{
|
|
||||||
return node->element;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::iterator &
|
|
||||||
kbList::iterator::operator++()
|
|
||||||
{
|
|
||||||
node = node ? node->next : NULL;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::iterator &
|
|
||||||
kbList::iterator::operator--()
|
|
||||||
{
|
|
||||||
node = node ? node->prev : NULL;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
kbList::iterator &
|
|
||||||
kbList::iterator::operator++(int /* foo */)
|
|
||||||
{
|
|
||||||
return operator++();
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::iterator &
|
|
||||||
kbList::iterator::operator--(int /* bar */)
|
|
||||||
{
|
|
||||||
return operator--();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
kbList::iterator::operator !=(kbList::iterator const & i) const
|
|
||||||
{
|
|
||||||
return node != i.node;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
kbList::iterator::operator ==(kbList::iterator const & i) const
|
|
||||||
{
|
|
||||||
return node == i.node;
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::kbList(bool ownsEntriesFlag)
|
|
||||||
{
|
|
||||||
first = NULL;
|
|
||||||
last = NULL;
|
|
||||||
ownsEntries = ownsEntriesFlag;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
kbList::push_back(void *element)
|
|
||||||
{
|
|
||||||
if(! first) // special case of empty list
|
|
||||||
{
|
|
||||||
first = new kbListNode(element);
|
|
||||||
last = first;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
last = new kbListNode(element, last);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
kbList::push_front(void *element)
|
|
||||||
{
|
|
||||||
if(! first) // special case of empty list
|
|
||||||
{
|
|
||||||
push_back(element);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
first = new kbListNode(element, NULL, first);
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
kbList::pop_back(void)
|
|
||||||
{
|
|
||||||
iterator i;
|
|
||||||
void *data;
|
|
||||||
bool ownsFlagBak = ownsEntries;
|
|
||||||
i = tail();
|
|
||||||
data = *i;
|
|
||||||
ownsEntries = false;
|
|
||||||
erase(i);
|
|
||||||
ownsEntries = ownsFlagBak;
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *
|
|
||||||
kbList::pop_front(void)
|
|
||||||
{
|
|
||||||
iterator i;
|
|
||||||
void *data;
|
|
||||||
bool ownsFlagBak = ownsEntries;
|
|
||||||
|
|
||||||
i = begin();
|
|
||||||
data = *i;
|
|
||||||
ownsEntries = false;
|
|
||||||
erase(i);
|
|
||||||
ownsEntries = ownsFlagBak;
|
|
||||||
return data;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
kbList::insert(kbList::iterator & i, void *element)
|
|
||||||
{
|
|
||||||
if(! i.Node())
|
|
||||||
return;
|
|
||||||
else if(i.Node() == first)
|
|
||||||
{
|
|
||||||
push_front(element);
|
|
||||||
i = first;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
i = kbList::iterator(new kbListNode(element, i.Node()->prev, i.Node()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
kbList::doErase(kbList::iterator & i)
|
|
||||||
{
|
|
||||||
kbListNode
|
|
||||||
*node = i.Node(),
|
|
||||||
*prev, *next;
|
|
||||||
|
|
||||||
if(! node) // illegal iterator
|
|
||||||
return;
|
|
||||||
|
|
||||||
prev = node->prev;
|
|
||||||
next = node->next;
|
|
||||||
|
|
||||||
// correct first/last:
|
|
||||||
if(node == first)
|
|
||||||
first = node->next;
|
|
||||||
if(node == last) // don't put else here!
|
|
||||||
last = node->prev;
|
|
||||||
|
|
||||||
// build new links:
|
|
||||||
if(prev)
|
|
||||||
prev->next = next;
|
|
||||||
if(next)
|
|
||||||
next->prev = prev;
|
|
||||||
|
|
||||||
// delete this node and contents:
|
|
||||||
// now done separately
|
|
||||||
//if(ownsEntries)
|
|
||||||
//delete *i;
|
|
||||||
delete i.Node();
|
|
||||||
|
|
||||||
// change the iterator to next element:
|
|
||||||
i = kbList::iterator(next);
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::~kbList()
|
|
||||||
{
|
|
||||||
kbListNode *next;
|
|
||||||
|
|
||||||
while ( first != NULL )
|
|
||||||
{
|
|
||||||
next = first->next;
|
|
||||||
if(ownsEntries)
|
|
||||||
delete first->element;
|
|
||||||
delete first;
|
|
||||||
first = next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::iterator
|
|
||||||
kbList::begin(void) const
|
|
||||||
{
|
|
||||||
return kbList::iterator(first);
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::iterator
|
|
||||||
kbList::tail(void) const
|
|
||||||
{
|
|
||||||
return kbList::iterator(last);
|
|
||||||
}
|
|
||||||
|
|
||||||
kbList::iterator
|
|
||||||
kbList::end(void) const
|
|
||||||
{
|
|
||||||
return kbList::iterator(NULL); // the one after the last
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned
|
|
||||||
kbList::size(void) const // inefficient
|
|
||||||
{
|
|
||||||
unsigned count = 0;
|
|
||||||
kbList::iterator i;
|
|
||||||
for(i = begin(); i != end(); i++, count++)
|
|
||||||
;
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef KBLIST_TEST
|
|
||||||
|
|
||||||
#include <iostream.h>
|
|
||||||
|
|
||||||
KBLIST_DEFINE(kbListInt,int);
|
|
||||||
|
|
||||||
int main(void)
|
|
||||||
{
|
|
||||||
int
|
|
||||||
n, *ptr;
|
|
||||||
kbListInt
|
|
||||||
l;
|
|
||||||
kbListInt::iterator
|
|
||||||
i;
|
|
||||||
|
|
||||||
for(n = 0; n < 10; n++)
|
|
||||||
{
|
|
||||||
ptr = new int;
|
|
||||||
*ptr = n*n;
|
|
||||||
l.push_back(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
i = l.begin(); // first element
|
|
||||||
i++; // 2nd
|
|
||||||
i++; // 3rd
|
|
||||||
i++; // 4th, insert here:
|
|
||||||
ptr = new int;
|
|
||||||
*ptr = 4444;
|
|
||||||
l.insert(i,ptr);
|
|
||||||
|
|
||||||
// this cannot work, because l.end() returns NULL:
|
|
||||||
i = l.end(); // behind last
|
|
||||||
i--; // still behind last
|
|
||||||
l.erase(i); // doesn't do anything
|
|
||||||
|
|
||||||
// this works:
|
|
||||||
i = l.tail(); // last element
|
|
||||||
i--;
|
|
||||||
--i;
|
|
||||||
l.erase(i); // erase 3rd last element (49)
|
|
||||||
|
|
||||||
for(i = l.begin(); i != l.end(); i++)
|
|
||||||
cout << *i << '\t' << *((int *)*i) << endl;
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,315 +0,0 @@
|
|||||||
/*-*- c++ -*-********************************************************
|
|
||||||
* kbList.h : a double linked list *
|
|
||||||
* *
|
|
||||||
* (C) 1998 by Karsten Ballüder (Ballueder@usa.net) *
|
|
||||||
* *
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
*******************************************************************/
|
|
||||||
|
|
||||||
#ifndef KBLIST_H
|
|
||||||
# define KBLIST_H
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
# pragma interface "kbList.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
# define NULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**@name Double linked list implementation. */
|
|
||||||
//@{
|
|
||||||
|
|
||||||
/** kbListNode is a class used by kbList. It represents a single
|
|
||||||
element in the list. It is not intended for general use outside
|
|
||||||
kbList functions.
|
|
||||||
*/
|
|
||||||
struct kbListNode
|
|
||||||
{
|
|
||||||
/// pointer to next node or NULL
|
|
||||||
struct kbListNode *next;
|
|
||||||
/// pointer to previous node or NULL
|
|
||||||
struct kbListNode *prev;
|
|
||||||
/// pointer to the actual data
|
|
||||||
void *element;
|
|
||||||
/** Constructor - it automatically links the node into the list, if
|
|
||||||
the iprev, inext parameters are given.
|
|
||||||
@param ielement pointer to the data for this node (i.e. the data itself)
|
|
||||||
@param iprev if not NULL, use this as previous element in list
|
|
||||||
@param inext if not NULL, use this as next element in list
|
|
||||||
*/
|
|
||||||
kbListNode( void *ielement,
|
|
||||||
kbListNode *iprev = NULL,
|
|
||||||
kbListNode *inext = NULL);
|
|
||||||
/// Destructor.
|
|
||||||
~kbListNode();
|
|
||||||
};
|
|
||||||
|
|
||||||
/** The main list class, handling void pointers as data.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class kbList
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/// An iterator class for kbList, just like for the STL classes.
|
|
||||||
class iterator
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
/// the node to which this iterator points
|
|
||||||
kbListNode *node;
|
|
||||||
friend class kbList;
|
|
||||||
public:
|
|
||||||
/** Constructor.
|
|
||||||
@param n if not NULL, the node to which to point
|
|
||||||
*/
|
|
||||||
iterator(kbListNode *n = NULL);
|
|
||||||
/** Dereference operator.
|
|
||||||
@return the data pointer of the node belonging to this
|
|
||||||
iterator
|
|
||||||
*/
|
|
||||||
void * operator*();
|
|
||||||
|
|
||||||
/** This operator allows us to write if(i). It is <em>not</em> a
|
|
||||||
dereference operator and the result is always useless apart
|
|
||||||
from its logical value!
|
|
||||||
*/
|
|
||||||
operator void*() const { return node == NULL ? (void*)0 : (void*)(-1); }
|
|
||||||
|
|
||||||
/** Increment operator - prefix, goes to next node in list.
|
|
||||||
@return itself
|
|
||||||
*/
|
|
||||||
iterator & operator++();
|
|
||||||
|
|
||||||
/** Decrement operator - prefix, goes to previous node in list.
|
|
||||||
@return itself
|
|
||||||
*/
|
|
||||||
iterator & operator--();
|
|
||||||
|
|
||||||
/** Increment operator - prefix, goes to next node in list.
|
|
||||||
@return itself
|
|
||||||
*/
|
|
||||||
iterator & operator++(int); //postfix
|
|
||||||
|
|
||||||
/** Decrement operator - prefix, goes to previous node in list.
|
|
||||||
@return itself
|
|
||||||
*/
|
|
||||||
iterator & operator--(int); //postfix
|
|
||||||
|
|
||||||
/** Comparison operator.
|
|
||||||
@return true if not equal.
|
|
||||||
*/
|
|
||||||
bool operator !=(iterator const &) const;
|
|
||||||
|
|
||||||
/* Comparison operator.
|
|
||||||
@return true if equal
|
|
||||||
*/
|
|
||||||
bool operator ==(iterator const &) const;
|
|
||||||
|
|
||||||
/** Returns a pointer to the node associated with this iterator.
|
|
||||||
This function is not for general use and should be
|
|
||||||
protected. However, if protected, it cannot be called from
|
|
||||||
derived classes' iterators. (Is this a bug in gcc/egcs?)
|
|
||||||
@return the node pointer
|
|
||||||
*/
|
|
||||||
inline kbListNode * Node(void) const
|
|
||||||
{ return node; }
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Constructor.
|
|
||||||
@param ownsEntriesFlag if true, the list owns the entries and
|
|
||||||
will issue a delete on each of them when deleting them. If
|
|
||||||
false, the entries themselves will not get deleted. Do not use
|
|
||||||
this with array types!
|
|
||||||
*/
|
|
||||||
kbList(bool ownsEntriesFlag = true);
|
|
||||||
|
|
||||||
/** Destructor.
|
|
||||||
If entries are owned, they will all get deleted from here.
|
|
||||||
*/
|
|
||||||
~kbList();
|
|
||||||
|
|
||||||
/** Tell list whether it owns objects. If owned, they can be
|
|
||||||
deleted by list. See the constructor for more details.
|
|
||||||
@param ownsflag if true, list will own entries
|
|
||||||
*/
|
|
||||||
void ownsObjects(bool ownsflag = true)
|
|
||||||
{ ownsEntries = ownsflag; }
|
|
||||||
|
|
||||||
/** Query whether list owns entries.
|
|
||||||
@return true if list owns entries
|
|
||||||
*/
|
|
||||||
bool ownsObjects(void)
|
|
||||||
{ return ownsEntries; }
|
|
||||||
|
|
||||||
/** Add an entry at the end of the list.
|
|
||||||
@param element pointer to data
|
|
||||||
*/
|
|
||||||
void push_back(void *element);
|
|
||||||
|
|
||||||
/** Add an entry at the head of the list.
|
|
||||||
@param element pointer to data
|
|
||||||
*/
|
|
||||||
void push_front(void *element);
|
|
||||||
|
|
||||||
/** Get element from end of the list and delete it.
|
|
||||||
NOTE: In this case the element's data will not get deleted by
|
|
||||||
the list. It is the responsibility of the caller to free it.
|
|
||||||
@return the element data
|
|
||||||
*/
|
|
||||||
void *pop_back(void);
|
|
||||||
|
|
||||||
/** Get element from head of the list and delete it.
|
|
||||||
NOTE: In this case the element's data will not get deleted by
|
|
||||||
the list. It is the responsibility of the caller to free it.
|
|
||||||
@return the element data
|
|
||||||
*/
|
|
||||||
void *pop_front(void);
|
|
||||||
|
|
||||||
/** Insert an element into the list.
|
|
||||||
@param i an iterator pointing to the element, before which the new one should be inserted
|
|
||||||
@param element the element data
|
|
||||||
*/
|
|
||||||
void insert(iterator & i, void *element);
|
|
||||||
|
|
||||||
/** Remove an element from the list _without_ deleting the object.
|
|
||||||
@param i iterator pointing to the element to be deleted
|
|
||||||
@return the value of the element just removed
|
|
||||||
*/
|
|
||||||
void *remove(iterator& i) { void *p = *i; doErase(i); return p; }
|
|
||||||
|
|
||||||
/** Erase an element, move iterator to following element.
|
|
||||||
@param i iterator pointing to the element to be deleted
|
|
||||||
*/
|
|
||||||
void erase(iterator & i) { deleteContent(i); doErase(i); }
|
|
||||||
|
|
||||||
/* Get head of list.
|
|
||||||
@return iterator pointing to head of list
|
|
||||||
*/
|
|
||||||
iterator begin(void) const;
|
|
||||||
|
|
||||||
/* Get end of list.
|
|
||||||
@return iterator pointing after the end of the list. This is an
|
|
||||||
invalid iterator which cannot be dereferenced or decremented. It is
|
|
||||||
only of use in comparisons. NOTE: this is different from STL!
|
|
||||||
@see tail
|
|
||||||
*/
|
|
||||||
iterator end(void) const;
|
|
||||||
|
|
||||||
/* Get last element in list.
|
|
||||||
@return iterator pointing to the last element in the list.
|
|
||||||
@see end
|
|
||||||
*/
|
|
||||||
iterator tail(void) const;
|
|
||||||
|
|
||||||
/* Get the number of elements in the list.
|
|
||||||
@return number of elements in the list
|
|
||||||
*/
|
|
||||||
unsigned size(void) const;
|
|
||||||
|
|
||||||
/* Query whether list is empty.
|
|
||||||
@return true if list is empty
|
|
||||||
*/
|
|
||||||
inline bool empty(void) const
|
|
||||||
{ return first == NULL ; }
|
|
||||||
|
|
||||||
protected:
|
|
||||||
/// if true, list owns entries
|
|
||||||
bool ownsEntries;
|
|
||||||
/// pointer to first element in list
|
|
||||||
kbListNode *first;
|
|
||||||
/// pointer to last element in list
|
|
||||||
kbListNode *last;
|
|
||||||
protected:
|
|
||||||
/** Erase an element, move iterator to following element.
|
|
||||||
@param i iterator pointing to the element to be deleted
|
|
||||||
*/
|
|
||||||
void doErase(iterator & i);
|
|
||||||
|
|
||||||
/** Deletes the actual content if ownsflag is set.
|
|
||||||
param iterator i
|
|
||||||
*/
|
|
||||||
inline void deleteContent(iterator i)
|
|
||||||
{ if(ownsEntries) delete *i; }
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
/// forbid copy construction
|
|
||||||
kbList(kbList const &foo);
|
|
||||||
/// forbid assignments
|
|
||||||
kbList& operator=(const kbList& foo);
|
|
||||||
};
|
|
||||||
|
|
||||||
/// just for backward compatibility, will be removed soon
|
|
||||||
typedef kbList::iterator kbListIterator;
|
|
||||||
/// cast an iterator to a pointer, compatibility only to be removed
|
|
||||||
#define kbListICast(type, iterator) ((type *)*iterator)
|
|
||||||
/// cast an iterator to a const pointer, compatibility only to be removed
|
|
||||||
#define kbListIcCast(type, iterator) ((type const *)*iterator)
|
|
||||||
|
|
||||||
/** Macro to define a kbList with a given name, having elements of
|
|
||||||
pointer to the given type. I.e. KBLIST_DEFINE(Int,int) would
|
|
||||||
create a kbListInt type holding int pointers.
|
|
||||||
*/
|
|
||||||
#define KBLIST_DEFINE(name,type) \
|
|
||||||
class name : public kbList \
|
|
||||||
{ \
|
|
||||||
public: \
|
|
||||||
class iterator : public kbList::iterator \
|
|
||||||
{ \
|
|
||||||
protected: \
|
|
||||||
inline iterator(kbList::iterator const & i) \
|
|
||||||
{ node = i.Node(); } \
|
|
||||||
friend class name; \
|
|
||||||
public: \
|
|
||||||
inline iterator(kbListNode *n = NULL) \
|
|
||||||
: kbList::iterator(n) {} \
|
|
||||||
inline type * operator*() \
|
|
||||||
/* the cast is needed for MS VC++ 5.0 */ \
|
|
||||||
{ return (type *)((kbList::iterator *)this)->operator*() ; } \
|
|
||||||
}; \
|
|
||||||
inline name(bool ownsEntriesFlag = TRUE) \
|
|
||||||
: kbList(ownsEntriesFlag) {} \
|
|
||||||
\
|
|
||||||
inline type *pop_back(void) \
|
|
||||||
{ return (type *) kbList::pop_back(); } \
|
|
||||||
\
|
|
||||||
inline type *pop_front(void) \
|
|
||||||
{ return (type *) kbList::pop_front(); } \
|
|
||||||
\
|
|
||||||
type *remove(iterator& i) \
|
|
||||||
{ return (type *)kbList::remove(i); } \
|
|
||||||
inline void erase(iterator & i) \
|
|
||||||
{ deleteContent(i); doErase(i); } \
|
|
||||||
\
|
|
||||||
inline iterator begin(void) const \
|
|
||||||
{ return kbList::begin(); } \
|
|
||||||
\
|
|
||||||
inline iterator end(void) const \
|
|
||||||
{ return kbList::end(); } \
|
|
||||||
\
|
|
||||||
inline iterator tail(void) const \
|
|
||||||
{ return kbList::tail(); } \
|
|
||||||
~name() \
|
|
||||||
{ \
|
|
||||||
kbListNode *next; \
|
|
||||||
while ( first != NULL ) \
|
|
||||||
{ \
|
|
||||||
next = first->next; \
|
|
||||||
if(ownsEntries) \
|
|
||||||
delete (type *)first->element; \
|
|
||||||
delete first; \
|
|
||||||
first = next; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
protected: \
|
|
||||||
inline void deleteContent(iterator i) \
|
|
||||||
{ if(ownsEntries) delete *i; } \
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef MCONFIG_H
|
|
||||||
/// define the most commonly used list type once:
|
|
||||||
KBLIST_DEFINE(kbStringList, String);
|
|
||||||
#endif
|
|
||||||
//@}
|
|
||||||
#endif // KBLIST_H
|
|
@ -1,490 +0,0 @@
|
|||||||
/*
|
|
||||||
* Program: wxLayout
|
|
||||||
*
|
|
||||||
* Author: Karsten Ballüder
|
|
||||||
*
|
|
||||||
* Copyright: (C) 1998, Karsten Ballüder <Ballueder@usa.net>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma implementation "wxLayout.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/wxprec.h"
|
|
||||||
#ifdef __BORLANDC__
|
|
||||||
# pragma hdrstop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wxLayout.h"
|
|
||||||
#include "wx/textfile.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "Micon.xpm"
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// main program
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
IMPLEMENT_APP(MyApp)
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// MyFrame
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
enum ids{ ID_ADD_SAMPLE = 1, ID_CLEAR, ID_PRINT,
|
|
||||||
ID_PRINT_SETUP, ID_PAGE_SETUP, ID_PREVIEW, ID_PRINT_PS,
|
|
||||||
ID_PRINT_SETUP_PS, ID_PAGE_SETUP_PS,ID_PREVIEW_PS,
|
|
||||||
ID_WRAP, ID_NOWRAP, ID_PASTE, ID_COPY, ID_CUT, ID_FIND,
|
|
||||||
ID_WXLAYOUT_DEBUG, ID_QUIT, ID_CLICK, ID_HTML, ID_TEXT,
|
|
||||||
ID_TEST, ID_LINEBREAKS_TEST, ID_LONG_TEST, ID_URL_TEST };
|
|
||||||
|
|
||||||
|
|
||||||
IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
|
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
|
|
||||||
EVT_MENU(ID_PRINT, MyFrame::OnPrint)
|
|
||||||
EVT_MENU(ID_PREVIEW, MyFrame::OnPrintPreview)
|
|
||||||
EVT_MENU(ID_PRINT_SETUP, MyFrame::OnPrintSetup)
|
|
||||||
EVT_MENU(ID_PAGE_SETUP, MyFrame::OnPageSetup)
|
|
||||||
EVT_MENU(ID_PRINT_PS, MyFrame::OnPrintPS)
|
|
||||||
EVT_MENU(ID_PREVIEW_PS, MyFrame::OnPrintPreviewPS)
|
|
||||||
EVT_MENU(ID_PRINT_SETUP_PS, MyFrame::OnPrintSetupPS)
|
|
||||||
EVT_MENU(ID_PAGE_SETUP_PS, MyFrame::OnPageSetupPS)
|
|
||||||
EVT_MENU (-1, MyFrame::OnCommand)
|
|
||||||
EVT_COMMAND (-1,-1, MyFrame::OnCommand)
|
|
||||||
EVT_CHAR ( wxLayoutWindow::OnChar )
|
|
||||||
END_EVENT_TABLE()
|
|
||||||
|
|
||||||
|
|
||||||
MyFrame::MyFrame(void) :
|
|
||||||
wxFrame( (wxFrame *) NULL, -1, "wxLayout",
|
|
||||||
wxPoint(880,100), wxSize(256,256) )
|
|
||||||
{
|
|
||||||
CreateStatusBar( 2 );
|
|
||||||
|
|
||||||
SetStatusText( "wxLayout by Karsten Ballüder." );
|
|
||||||
|
|
||||||
wxMenuBar *menu_bar = new wxMenuBar();
|
|
||||||
|
|
||||||
wxMenu *file_menu = new wxMenu;
|
|
||||||
file_menu->Append(ID_PRINT, "&Print...", "Print");
|
|
||||||
file_menu->Append(ID_PRINT_SETUP, "Print &Setup...","Setup printer properties");
|
|
||||||
file_menu->Append(ID_PAGE_SETUP, "Page Set&up...", "Page setup");
|
|
||||||
file_menu->Append(ID_PREVIEW, "Print Pre&view", "Preview");
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
file_menu->AppendSeparator();
|
|
||||||
file_menu->Append(ID_PRINT_PS, "Print PostScript...", "Print (PostScript)");
|
|
||||||
file_menu->Append(ID_PRINT_SETUP_PS, "Print Setup PostScript...", "Setup printer properties (PostScript)");
|
|
||||||
file_menu->Append(ID_PAGE_SETUP_PS, "Page Setup PostScript...", "Page setup (PostScript)");
|
|
||||||
file_menu->Append(ID_PREVIEW_PS, "Print Preview PostScript", "Preview (PostScript)");
|
|
||||||
#endif
|
|
||||||
file_menu->AppendSeparator();
|
|
||||||
file_menu->Append( ID_TEXT, "Export &Text");
|
|
||||||
file_menu->Append( ID_HTML, "Export &HTML");
|
|
||||||
file_menu->Append( ID_QUIT, "E&xit");
|
|
||||||
menu_bar->Append(file_menu, "&File" );
|
|
||||||
|
|
||||||
wxMenu *edit_menu = new wxMenu;
|
|
||||||
edit_menu->Append( ID_CLEAR, "C&lear");
|
|
||||||
edit_menu->Append( ID_ADD_SAMPLE, "&Example");
|
|
||||||
edit_menu->Append( ID_LONG_TEST, "Add &many lines");
|
|
||||||
edit_menu->AppendSeparator();
|
|
||||||
edit_menu->Append( ID_LINEBREAKS_TEST, "Add &several lines");
|
|
||||||
edit_menu->Append( ID_URL_TEST, "Insert an &URL");
|
|
||||||
edit_menu->AppendSeparator();
|
|
||||||
edit_menu->Append(ID_WRAP, "&Wrap mode", "Activate wrapping at pixel 200.");
|
|
||||||
edit_menu->Append(ID_NOWRAP, "&No-wrap mode", "Deactivate wrapping.");
|
|
||||||
edit_menu->AppendSeparator();
|
|
||||||
edit_menu->Append(ID_COPY, "&Copy", "Copy text to clipboard.");
|
|
||||||
edit_menu->Append(ID_CUT, "Cu&t", "Cut text to clipboard.");
|
|
||||||
edit_menu->Append(ID_PASTE,"&Paste", "Paste text from clipboard.");
|
|
||||||
edit_menu->Append(ID_FIND, "&Find", "Find text.");
|
|
||||||
menu_bar->Append(edit_menu, "&Edit" );
|
|
||||||
|
|
||||||
#ifndef __WXMSW__
|
|
||||||
menu_bar->Show( TRUE );
|
|
||||||
#endif // MSW
|
|
||||||
|
|
||||||
SetMenuBar( menu_bar );
|
|
||||||
|
|
||||||
m_lwin = new wxLayoutWindow(this);
|
|
||||||
m_lwin->SetStatusBar(GetStatusBar(), 0, 1);
|
|
||||||
m_lwin->SetMouseTracking(true);
|
|
||||||
m_lwin->SetEditable(true);
|
|
||||||
m_lwin->SetWrapMargin(40);
|
|
||||||
m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false);
|
|
||||||
m_lwin->SetFocus();
|
|
||||||
|
|
||||||
// create and set the background bitmap (this will result in a lattice)
|
|
||||||
static const int sizeBmp = 10;
|
|
||||||
wxBitmap *bitmap = new wxBitmap(sizeBmp, sizeBmp);
|
|
||||||
wxMemoryDC dcMem;
|
|
||||||
dcMem.SelectObject( *bitmap );
|
|
||||||
dcMem.SetBackground( *wxWHITE_BRUSH );
|
|
||||||
dcMem.Clear();
|
|
||||||
|
|
||||||
dcMem.SetPen( *wxGREEN_PEN );
|
|
||||||
dcMem.DrawLine(sizeBmp/2, 0, sizeBmp/2, sizeBmp);
|
|
||||||
dcMem.DrawLine(0, sizeBmp/2, sizeBmp, sizeBmp/2);
|
|
||||||
|
|
||||||
dcMem.SelectObject( wxNullBitmap );
|
|
||||||
|
|
||||||
m_lwin->SetBackgroundBitmap(bitmap);
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
MyFrame::AddSampleText(wxLayoutList *llist)
|
|
||||||
{
|
|
||||||
llist->Clear(wxSWISS,16,wxNORMAL,wxNORMAL, false);
|
|
||||||
llist->SetFont(-1,-1,-1,-1,-1,"blue");
|
|
||||||
llist->Insert("blue");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,-1,"black");
|
|
||||||
llist->Insert("The quick brown fox jumps over the lazy dog.");
|
|
||||||
llist->LineBreak();
|
|
||||||
|
|
||||||
llist->SetFont(wxROMAN,16,wxNORMAL,wxNORMAL, false);
|
|
||||||
llist->Insert("--");
|
|
||||||
llist->LineBreak();
|
|
||||||
|
|
||||||
llist->SetFont(wxROMAN);
|
|
||||||
llist->Insert("The quick brown fox jumps over the lazy dog.");
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->Insert("Hello ");
|
|
||||||
llist->Insert(new wxLayoutObjectIcon(new wxICON(Micon)));
|
|
||||||
llist->SetFontWeight(wxBOLD);
|
|
||||||
llist->Insert("World! ");
|
|
||||||
llist->SetFontWeight(wxNORMAL);
|
|
||||||
llist->Insert("The quick brown fox jumps...");
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->Insert("over the lazy dog.");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,true);
|
|
||||||
llist->Insert("underlined");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,false);
|
|
||||||
llist->SetFont(wxROMAN);
|
|
||||||
llist->Insert("This is ");
|
|
||||||
llist->SetFont(-1,-1,-1,wxBOLD); llist->Insert("BOLD "); llist->SetFont(-1,-1,-1,wxNORMAL);
|
|
||||||
llist->Insert("and ");
|
|
||||||
llist->SetFont(-1,-1,wxITALIC);
|
|
||||||
llist->Insert("italics ");
|
|
||||||
llist->SetFont(-1,-1,wxNORMAL);
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->Insert("and ");
|
|
||||||
llist->SetFont(-1,-1,wxSLANT);
|
|
||||||
llist->Insert("slanted");
|
|
||||||
llist->SetFont(-1,-1,wxNORMAL);
|
|
||||||
llist->Insert(" text.");
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->Insert("and ");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,-1,"blue");
|
|
||||||
llist->Insert("blue");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,-1,"black");
|
|
||||||
llist->Insert(" and ");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,-1,"green","black");
|
|
||||||
llist->Insert("green on black");
|
|
||||||
llist->SetFont(-1,-1,-1,-1,-1,"black","white");
|
|
||||||
llist->Insert(" text.");
|
|
||||||
llist->LineBreak();
|
|
||||||
|
|
||||||
llist->SetFont(-1,-1,wxSLANT);
|
|
||||||
llist->Insert("Slanted");
|
|
||||||
llist->SetFont(-1,-1,wxNORMAL);
|
|
||||||
llist->Insert(" and normal text and ");
|
|
||||||
llist->SetFont(-1,-1,wxSLANT);
|
|
||||||
llist->Insert("slanted");
|
|
||||||
llist->SetFont(-1,-1,wxNORMAL);
|
|
||||||
llist->Insert(" again.");
|
|
||||||
llist->LineBreak();
|
|
||||||
|
|
||||||
// add some more text for testing:
|
|
||||||
llist->Insert("And here the source for the test program:");
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->SetFont(wxTELETYPE,16);
|
|
||||||
llist->Insert("And here the source for the test program:");
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->Insert("And here the source for the test program:");
|
|
||||||
llist->LineBreak();
|
|
||||||
llist->Insert("And here the source for the test program:");
|
|
||||||
|
|
||||||
char buffer[1024];
|
|
||||||
FILE *in = fopen("wxLayout.cpp","r");
|
|
||||||
if(in)
|
|
||||||
{
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
fgets(buffer,1024,in);
|
|
||||||
if(feof(in))
|
|
||||||
break;
|
|
||||||
wxLayoutImportText(llist, buffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
llist->MoveCursorTo(wxPoint(0,0));
|
|
||||||
m_lwin->SetDirty();
|
|
||||||
m_lwin->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
MyFrame::Clear(void)
|
|
||||||
{
|
|
||||||
m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MyFrame::OnCommand( wxCommandEvent &event )
|
|
||||||
{
|
|
||||||
switch (event.GetId())
|
|
||||||
{
|
|
||||||
case ID_QUIT:
|
|
||||||
Close( TRUE );
|
|
||||||
break;
|
|
||||||
case ID_PRINT:
|
|
||||||
{
|
|
||||||
wxPrinter printer;
|
|
||||||
wxLayoutPrintout printout(m_lwin->GetLayoutList(),_("M: Printout"));
|
|
||||||
if (! printer.Print(this, &printout, TRUE))
|
|
||||||
wxMessageBox(
|
|
||||||
_("There was a problem with printing the message:\n"
|
|
||||||
"perhaps your current printer is not set up correctly?"),
|
|
||||||
_("Printing"), wxOK);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ID_NOWRAP:
|
|
||||||
case ID_WRAP:
|
|
||||||
m_lwin->SetWrapMargin(event.GetId() == ID_NOWRAP ? 0 : 40);
|
|
||||||
break;
|
|
||||||
case ID_ADD_SAMPLE:
|
|
||||||
AddSampleText(m_lwin->GetLayoutList());
|
|
||||||
break;
|
|
||||||
case ID_CLEAR:
|
|
||||||
Clear();
|
|
||||||
break;
|
|
||||||
case ID_CLICK:
|
|
||||||
cerr << "Received click event." << endl;
|
|
||||||
break;
|
|
||||||
case ID_PASTE:
|
|
||||||
m_lwin->Paste();
|
|
||||||
m_lwin->Refresh(FALSE);
|
|
||||||
break;
|
|
||||||
case ID_COPY:
|
|
||||||
m_lwin->Copy();
|
|
||||||
m_lwin->Refresh(FALSE);
|
|
||||||
break;
|
|
||||||
case ID_CUT:
|
|
||||||
m_lwin->Cut();
|
|
||||||
m_lwin->Refresh(FALSE);
|
|
||||||
break;
|
|
||||||
case ID_FIND:
|
|
||||||
m_lwin->Find("void");
|
|
||||||
m_lwin->Refresh(FALSE);
|
|
||||||
break;
|
|
||||||
case ID_HTML:
|
|
||||||
{
|
|
||||||
wxLayoutExportObject *export;
|
|
||||||
wxLayoutExportStatus status(m_lwin->GetLayoutList());
|
|
||||||
|
|
||||||
while((export = wxLayoutExport( &status,
|
|
||||||
WXLO_EXPORT_AS_HTML)) != NULL)
|
|
||||||
{
|
|
||||||
if(export->type == WXLO_EXPORT_HTML)
|
|
||||||
cout << *(export->content.text);
|
|
||||||
else
|
|
||||||
cout << "<!--UNKNOWN OBJECT>";
|
|
||||||
delete export;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ID_TEXT:
|
|
||||||
{
|
|
||||||
wxLayoutExportObject *export;
|
|
||||||
wxLayoutExportStatus status(m_lwin->GetLayoutList());
|
|
||||||
|
|
||||||
while((export = wxLayoutExport( &status, WXLO_EXPORT_AS_TEXT)) != NULL)
|
|
||||||
{
|
|
||||||
if(export->type == WXLO_EXPORT_TEXT)
|
|
||||||
cout << *(export->content.text);
|
|
||||||
else
|
|
||||||
cout << "<!--UNKNOWN OBJECT>";
|
|
||||||
delete export;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case ID_LONG_TEST:
|
|
||||||
{
|
|
||||||
wxString line;
|
|
||||||
wxLayoutList *llist = m_lwin->GetLayoutList();
|
|
||||||
for(int i = 1; i < 5000; i++)
|
|
||||||
{
|
|
||||||
line.Printf("This is line number %d.", i);
|
|
||||||
llist->Insert(line);
|
|
||||||
llist->LineBreak();
|
|
||||||
}
|
|
||||||
llist->MoveCursorTo(wxPoint(0,0));
|
|
||||||
m_lwin->SetDirty();
|
|
||||||
m_lwin->Refresh();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case ID_LINEBREAKS_TEST:
|
|
||||||
wxLayoutImportText(m_lwin->GetLayoutList(),
|
|
||||||
"This is a text\n"
|
|
||||||
"with embedded line\n"
|
|
||||||
"breaks.\n");
|
|
||||||
m_lwin->SetDirty();
|
|
||||||
m_lwin->Refresh();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ID_URL_TEST:
|
|
||||||
// VZ: this doesn't work, of course, but I think it should -
|
|
||||||
// wxLayoutWindow should have a flag m_highlightUrls and do it itself
|
|
||||||
// (instead of doing it manually like M does now)
|
|
||||||
m_lwin->GetLayoutList()->Insert("http://www.wxwindows.org/");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
void MyFrame::OnPrint(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_WINDOWS);
|
|
||||||
#else
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
#endif
|
|
||||||
wxPrinter printer;
|
|
||||||
wxLayoutPrintout printout( m_lwin->GetLayoutList(),"Printout from wxLayout");
|
|
||||||
if (! printer.Print(this, &printout, TRUE))
|
|
||||||
wxMessageBox(
|
|
||||||
"There was a problem printing.\nPerhaps your current printer is not set correctly?",
|
|
||||||
"Printing", wxOK);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPrintPS(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
|
|
||||||
#ifdef OS_UNIX
|
|
||||||
wxPostScriptPrinter printer;
|
|
||||||
wxLayoutPrintout printout( m_lwin->GetLayoutList(),"My printout");
|
|
||||||
printer.Print(this, &printout, TRUE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPrintPreview(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_WINDOWS);
|
|
||||||
#else
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
#endif
|
|
||||||
wxPrintData printData;
|
|
||||||
|
|
||||||
// Pass two printout objects: for preview, and possible printing.
|
|
||||||
wxPrintPreview *preview = new wxPrintPreview(new
|
|
||||||
wxLayoutPrintout(
|
|
||||||
m_lwin->GetLayoutList()), new wxLayoutPrintout( m_lwin->GetLayoutList()), & printData);
|
|
||||||
if (!preview->Ok())
|
|
||||||
{
|
|
||||||
delete preview;
|
|
||||||
wxMessageBox("There was a problem previewing.\nPerhaps your current printer is not set correctly?", "Previewing", wxOK);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650));
|
|
||||||
frame->Centre(wxBOTH);
|
|
||||||
frame->Initialize();
|
|
||||||
frame->Show(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPrintPreviewPS(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
|
|
||||||
wxPrintData printData;
|
|
||||||
|
|
||||||
// Pass two printout objects: for preview, and possible printing.
|
|
||||||
wxPrintPreview *preview = new wxPrintPreview(new wxLayoutPrintout( m_lwin->GetLayoutList()), new wxLayoutPrintout( m_lwin->GetLayoutList()), & printData);
|
|
||||||
wxPreviewFrame *frame = new wxPreviewFrame(preview, this, "Demo Print Preview", wxPoint(100, 100), wxSize(600, 650));
|
|
||||||
frame->Centre(wxBOTH);
|
|
||||||
frame->Initialize();
|
|
||||||
frame->Show(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPrintSetup(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
#ifdef OS_WIN
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_WINDOWS);
|
|
||||||
#else
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
#endif
|
|
||||||
wxPrintDialog printerDialog(this, & m_PrintData);
|
|
||||||
printerDialog.ShowModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPageSetup(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_WINDOWS);
|
|
||||||
#else
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
#endif
|
|
||||||
wxPageSetupData data;
|
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
wxPageSetupDialog pageSetupDialog(this, & data);
|
|
||||||
#else
|
|
||||||
wxGenericPageSetupDialog pageSetupDialog(this, & data);
|
|
||||||
#endif
|
|
||||||
pageSetupDialog.ShowModal();
|
|
||||||
|
|
||||||
data = pageSetupDialog.GetPageSetupData();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPrintSetupPS(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
|
|
||||||
wxPrintData data;
|
|
||||||
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
wxPrintDialog printerDialog(this, & data);
|
|
||||||
#else
|
|
||||||
wxGenericPrintDialog printerDialog(this, & data);
|
|
||||||
#endif
|
|
||||||
printerDialog.ShowModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MyFrame::OnPageSetupPS(wxCommandEvent& WXUNUSED(event))
|
|
||||||
{
|
|
||||||
wxGetApp().SetPrintMode(wxPRINT_POSTSCRIPT);
|
|
||||||
|
|
||||||
wxPageSetupData data;
|
|
||||||
#ifdef __WXMSW__
|
|
||||||
wxPageSetupDialog pageSetupDialog(this, & data);
|
|
||||||
#else
|
|
||||||
wxGenericPageSetupDialog pageSetupDialog(this, & data);
|
|
||||||
#endif
|
|
||||||
pageSetupDialog.ShowModal();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// MyApp
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
MyApp::MyApp(void) :
|
|
||||||
wxApp( )
|
|
||||||
{
|
|
||||||
};
|
|
||||||
|
|
||||||
bool MyApp::OnInit(void)
|
|
||||||
{
|
|
||||||
wxFrame *frame = new MyFrame();
|
|
||||||
frame->Show( TRUE );
|
|
||||||
// wxSetAFMPath("/usr/local/src/wxWindows/misc/afm/");
|
|
||||||
return TRUE;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,66 +0,0 @@
|
|||||||
/* -*- c++ -*- */
|
|
||||||
|
|
||||||
#ifndef __WXLAYOUTH__
|
|
||||||
#define __WXLAYOUTH__
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
#pragma interface
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wx/wx.h"
|
|
||||||
|
|
||||||
#include "wxllist.h"
|
|
||||||
#include "wxlwindow.h"
|
|
||||||
#include "wxlparser.h"
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// derived classes
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class MyFrame;
|
|
||||||
class MyApp;
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// MyFrame
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class MyFrame: public wxFrame
|
|
||||||
{
|
|
||||||
DECLARE_DYNAMIC_CLASS(MyFrame)
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
MyFrame(void);
|
|
||||||
void AddSampleText(wxLayoutList *llist);
|
|
||||||
void Clear(void);
|
|
||||||
void OnCommand( wxCommandEvent &event );
|
|
||||||
|
|
||||||
void OnPrint(wxCommandEvent& event);
|
|
||||||
void OnPrintPreview(wxCommandEvent& event);
|
|
||||||
void OnPrintSetup(wxCommandEvent& event);
|
|
||||||
void OnPageSetup(wxCommandEvent& event);
|
|
||||||
void OnPrintPS(wxCommandEvent& event);
|
|
||||||
void OnPrintPreviewPS(wxCommandEvent& event);
|
|
||||||
void OnPrintSetupPS(wxCommandEvent& event);
|
|
||||||
void OnPageSetupPS(wxCommandEvent& event);
|
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
|
|
||||||
private:
|
|
||||||
wxLayoutWindow *m_lwin;
|
|
||||||
wxPrintData m_PrintData;
|
|
||||||
};
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// MyApp
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
class MyApp: public wxApp
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
MyApp(void);
|
|
||||||
virtual bool OnInit(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // __WXCONVERTH__
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,265 +0,0 @@
|
|||||||
/*-*- c++ -*-********************************************************
|
|
||||||
* wxlparser.h : parsers, import/export for wxLayoutList *
|
|
||||||
* *
|
|
||||||
* (C) 1998,1999 by Karsten Ballüder (Ballueder@usa.net) *
|
|
||||||
* *
|
|
||||||
* $Id$
|
|
||||||
*******************************************************************/
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
# pragma implementation "wxlparser.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <wx/wxprec.h>
|
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
|
||||||
# pragma hdrstop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "Mpch.h"
|
|
||||||
|
|
||||||
#ifdef M_PREFIX
|
|
||||||
# include "gui/wxllist.h"
|
|
||||||
# include "gui/wxlparser.h"
|
|
||||||
#else
|
|
||||||
# include "wxllist.h"
|
|
||||||
# include "wxlparser.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BASE_SIZE 12
|
|
||||||
|
|
||||||
inline static bool IsEndOfLine(const char *p)
|
|
||||||
{
|
|
||||||
// the end of line is either just '\n' or "\r\n" - we understand both (even
|
|
||||||
// though the second is used only under DOS/Windows) to be able to import
|
|
||||||
// DOS text files even under Unix
|
|
||||||
return (*p == '\n') || ((*p == '\r') && (*(p + 1) == '\n'));
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxLayoutImportText(wxLayoutList *list, wxString const &str)
|
|
||||||
{
|
|
||||||
if ( !str )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// we change the string temporarily inside this function
|
|
||||||
wxString& s = (wxString &)str; // const_cast
|
|
||||||
|
|
||||||
char * cptr = s.GetWriteBuf(s.Len());
|
|
||||||
const char * begin = cptr;
|
|
||||||
char backup;
|
|
||||||
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
begin = cptr;
|
|
||||||
while( *cptr && !IsEndOfLine(cptr) )
|
|
||||||
cptr++;
|
|
||||||
backup = *cptr;
|
|
||||||
*cptr = '\0';
|
|
||||||
list->Insert(begin);
|
|
||||||
*cptr = backup;
|
|
||||||
|
|
||||||
// check if it's the end of this line
|
|
||||||
if ( IsEndOfLine(cptr) )
|
|
||||||
{
|
|
||||||
// if it was "\r\n", skip the following '\n'
|
|
||||||
if ( *cptr == '\r' )
|
|
||||||
cptr++;
|
|
||||||
list->LineBreak();
|
|
||||||
}
|
|
||||||
else if(backup == '\0') // reached end of string
|
|
||||||
break;
|
|
||||||
cptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
s.UngetWriteBuf();
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
wxString wxLayoutExportCmdAsHTML(wxLayoutObjectCmd const & cmd,
|
|
||||||
wxLayoutStyleInfo *styleInfo)
|
|
||||||
{
|
|
||||||
static char buffer[20];
|
|
||||||
wxString html;
|
|
||||||
|
|
||||||
wxLayoutStyleInfo *si = cmd.GetStyle();
|
|
||||||
|
|
||||||
int size, sizecount;
|
|
||||||
|
|
||||||
html += "<font ";
|
|
||||||
|
|
||||||
if(si->m_fg_valid)
|
|
||||||
{
|
|
||||||
html +="color=";
|
|
||||||
sprintf(buffer,"\"#%02X%02X%02X\"", si->m_fg.Red(),si->m_fg.Green(),si->m_fg.Blue());
|
|
||||||
html += buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(si->m_bg_valid)
|
|
||||||
{
|
|
||||||
html += " bgcolor=";
|
|
||||||
sprintf(buffer,"\"#%02X%02X%02X\"", si->m_bg.Red(),si->m_bg.Green(),si->m_bg.Blue());
|
|
||||||
html += buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(si->family)
|
|
||||||
{
|
|
||||||
case wxSWISS:
|
|
||||||
case wxMODERN:
|
|
||||||
html += " face=\"Arial,Helvetica\""; break;
|
|
||||||
case wxROMAN:
|
|
||||||
html += " face=\"Times New Roman, Times\""; break;
|
|
||||||
case wxTELETYPE:
|
|
||||||
html += " face=\"Courier New, Courier\""; break;
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
|
|
||||||
size = BASE_SIZE; sizecount = 0;
|
|
||||||
while(size < si->size && sizecount < 5)
|
|
||||||
{
|
|
||||||
sizecount ++;
|
|
||||||
size = (size*12)/10;
|
|
||||||
}
|
|
||||||
while(size > si->size && sizecount > -5)
|
|
||||||
{
|
|
||||||
sizecount --;
|
|
||||||
size = (size*10)/12;
|
|
||||||
}
|
|
||||||
html += "size=";
|
|
||||||
sprintf(buffer,"%+1d", sizecount);
|
|
||||||
html += buffer;
|
|
||||||
|
|
||||||
html +=">";
|
|
||||||
|
|
||||||
if(styleInfo != NULL)
|
|
||||||
html ="</font>"+html; // terminate any previous font command
|
|
||||||
|
|
||||||
if((si->weight == wxBOLD) && ( (!styleInfo) || (styleInfo->weight != wxBOLD)))
|
|
||||||
html += "<b>";
|
|
||||||
else
|
|
||||||
if(si->weight != wxBOLD && ( styleInfo && (styleInfo->weight == wxBOLD)))
|
|
||||||
html += "</b>";
|
|
||||||
|
|
||||||
if(si->style == wxSLANT)
|
|
||||||
si->style = wxITALIC; // the same for html
|
|
||||||
|
|
||||||
if((si->style == wxITALIC) && ( (!styleInfo) || (styleInfo->style != wxITALIC)))
|
|
||||||
html += "<i>";
|
|
||||||
else
|
|
||||||
if(si->style != wxITALIC && ( styleInfo && (styleInfo->style == wxITALIC)))
|
|
||||||
html += "</i>";
|
|
||||||
|
|
||||||
if(si->underline && ( (!styleInfo) || ! styleInfo->underline))
|
|
||||||
html += "<u>";
|
|
||||||
else if(si->underline == false && ( styleInfo && styleInfo->underline))
|
|
||||||
html += "</u>";
|
|
||||||
|
|
||||||
|
|
||||||
*styleInfo = *si; // update last style info
|
|
||||||
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wxLayoutExportStatus::wxLayoutExportStatus(wxLayoutList *list)
|
|
||||||
{
|
|
||||||
m_si = list->GetDefaultStyleInfo();
|
|
||||||
m_line = list->GetFirstLine();
|
|
||||||
m_iterator = m_line->GetFirstObject();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define WXLO_IS_TEXT(type) \
|
|
||||||
( type == WXLO_TYPE_TEXT \
|
|
||||||
|| (type == WXLO_TYPE_CMD \
|
|
||||||
&& mode == WXLO_EXPORT_AS_HTML))
|
|
||||||
|
|
||||||
|
|
||||||
wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
|
|
||||||
int mode, int flags)
|
|
||||||
{
|
|
||||||
wxASSERT(status);
|
|
||||||
wxLayoutExportObject * export;
|
|
||||||
|
|
||||||
if(status->m_iterator == NULLIT) // end of line
|
|
||||||
{
|
|
||||||
if(!status->m_line || status->m_line->GetNextLine() == NULL)
|
|
||||||
// reached end of list
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
export = new wxLayoutExportObject();
|
|
||||||
wxLayoutObjectType type;
|
|
||||||
if(status->m_iterator != NULLIT)
|
|
||||||
{
|
|
||||||
type = (** status->m_iterator).GetType();
|
|
||||||
if( mode == WXLO_EXPORT_AS_OBJECTS || ! WXLO_IS_TEXT(type)) // simple case
|
|
||||||
{
|
|
||||||
export->type = WXLO_EXPORT_OBJECT;
|
|
||||||
export->content.object = *status->m_iterator;
|
|
||||||
status->m_iterator++;
|
|
||||||
return export;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ // iterator == NULLIT
|
|
||||||
if(mode == WXLO_EXPORT_AS_OBJECTS)
|
|
||||||
{
|
|
||||||
export->type = WXLO_EXPORT_EMPTYLINE;
|
|
||||||
export->content.object = NULL; //empty line
|
|
||||||
status->m_line = status->m_line->GetNextLine();
|
|
||||||
if(status->m_line)
|
|
||||||
status->m_iterator = status->m_line->GetFirstObject();
|
|
||||||
return export;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
type = WXLO_TYPE_TEXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString *str = new wxString();
|
|
||||||
// text must be concatenated
|
|
||||||
for(;;)
|
|
||||||
{
|
|
||||||
while(status->m_iterator == NULLIT)
|
|
||||||
{
|
|
||||||
if(flags & WXLO_EXPORT_AS_HTML)
|
|
||||||
*str += "<br>";
|
|
||||||
if(flags & WXLO_EXPORT_WITH_CRLF)
|
|
||||||
*str += "\r\n";
|
|
||||||
else
|
|
||||||
*str += '\n';
|
|
||||||
|
|
||||||
status->m_line = status->m_line->GetNextLine();
|
|
||||||
if(status->m_line)
|
|
||||||
status->m_iterator = status->m_line->GetFirstObject();
|
|
||||||
else
|
|
||||||
break; // end of list
|
|
||||||
}
|
|
||||||
if(! status->m_line) // reached end of list, fall through
|
|
||||||
break;
|
|
||||||
type = (** status->m_iterator).GetType();
|
|
||||||
if(type == WXLO_TYPE_ICON)
|
|
||||||
break;
|
|
||||||
switch(type)
|
|
||||||
{
|
|
||||||
case WXLO_TYPE_TEXT:
|
|
||||||
*str += ((wxLayoutObjectText *)*status->m_iterator)->GetText();
|
|
||||||
break;
|
|
||||||
case WXLO_TYPE_CMD:
|
|
||||||
if(mode == WXLO_EXPORT_AS_HTML)
|
|
||||||
*str += wxLayoutExportCmdAsHTML(*(wxLayoutObjectCmd const
|
|
||||||
*)*status->m_iterator, & status->m_si);
|
|
||||||
break;
|
|
||||||
default: // ignore icons
|
|
||||||
;
|
|
||||||
}
|
|
||||||
status->m_iterator++;
|
|
||||||
}
|
|
||||||
|
|
||||||
export->type = (mode == WXLO_EXPORT_AS_HTML)
|
|
||||||
? WXLO_EXPORT_HTML : WXLO_EXPORT_TEXT;
|
|
||||||
export->content.text = str;
|
|
||||||
return export;
|
|
||||||
}
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
|||||||
/*-*- c++ -*-********************************************************
|
|
||||||
* wxlparser.h : parsers, import/export for wxLayoutList *
|
|
||||||
* *
|
|
||||||
* (C) 1998 by Karsten Ballüder (Ballueder@usa.net) *
|
|
||||||
* *
|
|
||||||
* $Id$
|
|
||||||
*******************************************************************/
|
|
||||||
#ifndef WXLPARSER_H
|
|
||||||
# define WXLPARSER_H
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
# pragma interface "wxlparser.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
# define NULL 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum wxLayoutExportType
|
|
||||||
{
|
|
||||||
WXLO_EXPORT_TEXT,
|
|
||||||
WXLO_EXPORT_HTML,
|
|
||||||
WXLO_EXPORT_OBJECT,
|
|
||||||
// this can be caused by empty lines:
|
|
||||||
WXLO_EXPORT_EMPTYLINE
|
|
||||||
};
|
|
||||||
|
|
||||||
enum wxLayoutExportMode
|
|
||||||
{
|
|
||||||
WXLO_EXPORT_AS_TEXT = 0x00,
|
|
||||||
WXLO_EXPORT_AS_TEXT_AND_COMMANDS = 0x01,
|
|
||||||
WXLO_EXPORT_AS_HTML = 0x02,
|
|
||||||
WXLO_EXPORT_AS_OBJECTS = 0x03,
|
|
||||||
|
|
||||||
// non 0:
|
|
||||||
WXLO_EXPORT_WITH_CRLF = 0x10,
|
|
||||||
WXLO_EXPORT_WITH_LF_ONLY = 0x20
|
|
||||||
};
|
|
||||||
|
|
||||||
struct wxLayoutExportObject
|
|
||||||
{
|
|
||||||
wxLayoutExportType type;
|
|
||||||
union
|
|
||||||
{
|
|
||||||
wxString *text;
|
|
||||||
wxLayoutObject *object;
|
|
||||||
}content;
|
|
||||||
~wxLayoutExportObject()
|
|
||||||
{
|
|
||||||
if(type == WXLO_EXPORT_TEXT || type == WXLO_EXPORT_HTML)
|
|
||||||
delete content.text;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
struct wxLayoutExportStatus
|
|
||||||
{
|
|
||||||
wxLayoutExportStatus(wxLayoutList *list);
|
|
||||||
wxLayoutLine * m_line;
|
|
||||||
wxLOiterator m_iterator;
|
|
||||||
wxLayoutStyleInfo m_si;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef OS_WIN
|
|
||||||
#define WXLO_DEFAULT_EXPORT_MODE WXLO_EXPORT_WITH_CRLF
|
|
||||||
#else // Unix
|
|
||||||
#define WXLO_DEFAULT_EXPORT_MODE WXLO_EXPORT_WITH_LF_ONLY
|
|
||||||
#endif // Win/Unix
|
|
||||||
|
|
||||||
/// import text into a wxLayoutList (including linefeeds):
|
|
||||||
void wxLayoutImportText(wxLayoutList *list, wxString const &str);
|
|
||||||
|
|
||||||
/// export text in a given format
|
|
||||||
wxLayoutExportObject *wxLayoutExport(wxLayoutExportStatus *status,
|
|
||||||
int mode = WXLO_EXPORT_AS_TEXT,
|
|
||||||
int flags = WXLO_DEFAULT_EXPORT_MODE);
|
|
||||||
|
|
||||||
#endif //WXLPARSER_H
|
|
File diff suppressed because it is too large
Load Diff
@ -1,234 +0,0 @@
|
|||||||
/*-*- c++ -*-********************************************************
|
|
||||||
* wxLwindow.h : a scrolled Window for displaying/entering rich text*
|
|
||||||
* *
|
|
||||||
* (C) 1998,1999 by Karsten Ballüder (Ballueder@usa.net) *
|
|
||||||
* *
|
|
||||||
* $Id$
|
|
||||||
*******************************************************************/
|
|
||||||
#ifndef WXLWINDOW_H
|
|
||||||
#define WXLWINDOW_H
|
|
||||||
|
|
||||||
#ifdef __GNUG__
|
|
||||||
# pragma interface "wxlwindow.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef USE_PCH
|
|
||||||
# include <wx/wx.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "wxllist.h"
|
|
||||||
|
|
||||||
#ifndef WXLOWIN_MENU_FIRST
|
|
||||||
# define WXLOWIN_MENU_FIRST 12000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define wxUSE_PRIVATE_CLIPBOARD_FORMAT 1
|
|
||||||
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
WXLOWIN_MENU_LARGER = WXLOWIN_MENU_FIRST,
|
|
||||||
WXLOWIN_MENU_SMALLER,
|
|
||||||
WXLOWIN_MENU_UNDERLINE_ON,
|
|
||||||
WXLOWIN_MENU_UNDERLINE_OFF,
|
|
||||||
WXLOWIN_MENU_BOLD_ON,
|
|
||||||
WXLOWIN_MENU_BOLD_OFF,
|
|
||||||
WXLOWIN_MENU_ITALICS_ON,
|
|
||||||
WXLOWIN_MENU_ITALICS_OFF,
|
|
||||||
WXLOWIN_MENU_ROMAN,
|
|
||||||
WXLOWIN_MENU_TYPEWRITER,
|
|
||||||
WXLOWIN_MENU_SANSSERIF,
|
|
||||||
WXLOWIN_MENU_RCLICK,
|
|
||||||
WXLOWIN_MENU_LCLICK,
|
|
||||||
WXLOWIN_MENU_DBLCLICK,
|
|
||||||
WXLOWIN_MENU_MOUSEMOVE,
|
|
||||||
WXLOWIN_MENU_LAST = WXLOWIN_MENU_MOUSEMOVE
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
This class is a rich text editing widget.
|
|
||||||
*/
|
|
||||||
class wxLayoutWindow : public wxScrolledWindow
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/** Constructor.
|
|
||||||
@param parent parent window to display this panel in
|
|
||||||
*/
|
|
||||||
wxLayoutWindow(wxWindow *parent);
|
|
||||||
|
|
||||||
/// Destructor.
|
|
||||||
virtual ~wxLayoutWindow();
|
|
||||||
|
|
||||||
/**@name Editing functionality */
|
|
||||||
//@{
|
|
||||||
/// Clears the window and sets default parameters.
|
|
||||||
void Clear(int family = wxROMAN,
|
|
||||||
int size=12,
|
|
||||||
int style=wxNORMAL,
|
|
||||||
int weight=wxNORMAL,
|
|
||||||
int underline=0,
|
|
||||||
wxColour *fg=NULL,
|
|
||||||
wxColour *bg=NULL);
|
|
||||||
/** Sets a background image, only used on screen, not on printouts.
|
|
||||||
@param bitmap a pointer to a wxBitmap or NULL to remove it
|
|
||||||
*/
|
|
||||||
void SetBackgroundBitmap(wxBitmap *bitmap = NULL)
|
|
||||||
{
|
|
||||||
if(m_BGbitmap) delete m_BGbitmap;
|
|
||||||
m_BGbitmap = bitmap;
|
|
||||||
}
|
|
||||||
/// Enable or disable editing, i.e. processing of keystrokes.
|
|
||||||
void SetEditable(bool toggle) { m_Editable = toggle; }
|
|
||||||
/// Query whether list can be edited by user.
|
|
||||||
bool IsEditable(void) const { return m_Editable; }
|
|
||||||
/** Sets cursor visibility, visible=1, invisible=0,
|
|
||||||
visible-on-demand=-1, to hide it until moved.
|
|
||||||
@param visibility -1,0 or 1
|
|
||||||
@return the old visibility
|
|
||||||
*/
|
|
||||||
inline int SetCursorVisibility(int visibility = -1)
|
|
||||||
{ int v =m_CursorVisibility;
|
|
||||||
m_CursorVisibility = visibility; return v;}
|
|
||||||
|
|
||||||
/// Pastes text from clipboard.
|
|
||||||
void Paste(void);
|
|
||||||
/** Copies selection to clipboard.
|
|
||||||
@param invalidate used internally, see wxllist.h for details
|
|
||||||
*/
|
|
||||||
bool Copy(bool invalidate = true);
|
|
||||||
/// Copies selection to clipboard and deletes it.
|
|
||||||
bool Cut(void);
|
|
||||||
//@}
|
|
||||||
|
|
||||||
bool Find(const wxString &needle,
|
|
||||||
wxPoint * fromWhere = NULL);
|
|
||||||
|
|
||||||
void EnablePopup(bool enable = true) { m_DoPopupMenu = enable; }
|
|
||||||
|
|
||||||
/** Sets the wrap margin.
|
|
||||||
@param margin set this to 0 to disable it
|
|
||||||
*/
|
|
||||||
void SetWrapMargin(CoordType margin) { m_WrapMargin = margin; }
|
|
||||||
|
|
||||||
/** Redraws the window.
|
|
||||||
Internally, this stores the parameter and calls a refresh on
|
|
||||||
wxMSW, draws directly on wxGTK.
|
|
||||||
*/
|
|
||||||
void DoPaint(const wxRect *updateRect = NULL);
|
|
||||||
|
|
||||||
/// if exact == false, assume 50% extra size for the future
|
|
||||||
void ResizeScrollbars(bool exact = false); // don't change this to true!
|
|
||||||
|
|
||||||
/// if the flag is true, we send events when user clicks on embedded objects
|
|
||||||
inline void SetMouseTracking(bool doIt = true) { m_doSendEvents = doIt; }
|
|
||||||
|
|
||||||
/* Returns a pointer to the wxLayoutList object.
|
|
||||||
@return the list
|
|
||||||
*/
|
|
||||||
wxLayoutList * GetLayoutList(void) { return m_llist; }
|
|
||||||
|
|
||||||
/**@name Callbacks */
|
|
||||||
//@{
|
|
||||||
void OnPaint(wxPaintEvent &event);
|
|
||||||
void OnChar(wxKeyEvent& event);
|
|
||||||
void OnKeyUp(wxKeyEvent& event);
|
|
||||||
void OnMenu(wxCommandEvent& event);
|
|
||||||
void OnLeftMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_LCLICK, event); }
|
|
||||||
void OnRightMouseClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_RCLICK, event); }
|
|
||||||
void OnMouseDblClick(wxMouseEvent& event) { OnMouse(WXLOWIN_MENU_DBLCLICK, event); }
|
|
||||||
void OnMouseMove(wxMouseEvent &event) { OnMouse(WXLOWIN_MENU_MOUSEMOVE, event) ; }
|
|
||||||
void OnSetFocus(wxFocusEvent &ev);
|
|
||||||
void OnKillFocus(wxFocusEvent &ev);
|
|
||||||
//@}
|
|
||||||
|
|
||||||
/// Creates a wxMenu for use as a format popup.
|
|
||||||
static wxMenu * MakeFormatMenu(void);
|
|
||||||
/**@name Dirty flag handling for optimisations. */
|
|
||||||
//@{
|
|
||||||
/// Set dirty flag.
|
|
||||||
void SetDirty(void) { m_Dirty = true; }
|
|
||||||
/// Query whether window needs redrawing.
|
|
||||||
bool IsDirty(void) const { return m_Dirty; }
|
|
||||||
/// Reset dirty flag.
|
|
||||||
void ResetDirty(void) { m_Dirty = false; }
|
|
||||||
//@}
|
|
||||||
/// Redraws the window, used by DoPaint() or OnPaint().
|
|
||||||
void InternalPaint(const wxRect *updateRect);
|
|
||||||
|
|
||||||
/// Has list been modified/edited?
|
|
||||||
bool IsModified(void) const { return m_Modified; }
|
|
||||||
/// Mark list as modified or unchanged.
|
|
||||||
void SetModified(bool modified = true) { m_Modified = modified; }
|
|
||||||
/** Tell window to update a wxStatusBar with UserData labels and
|
|
||||||
cursor positions.
|
|
||||||
@param bar wxStatusBar pointer
|
|
||||||
@param labelfield field to use in statusbar for URLs/userdata labels, or -1 to disable
|
|
||||||
@param cursorfield field to use for cursor position, or -1 to disable
|
|
||||||
*/
|
|
||||||
void SetStatusBar(class wxStatusBar *bar,
|
|
||||||
int labelfield = -1,
|
|
||||||
int cursorfield = -1)
|
|
||||||
{
|
|
||||||
m_StatusBar = bar; m_StatusFieldLabel = labelfield;
|
|
||||||
m_StatusFieldCursor = cursorfield;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
/// generic function for mouse events processing
|
|
||||||
void OnMouse(int eventId, wxMouseEvent& event);
|
|
||||||
/// as the name says
|
|
||||||
void ScrollToCursor(void);
|
|
||||||
/// for sending events
|
|
||||||
wxWindow *m_Parent;
|
|
||||||
/// Shall we send events?
|
|
||||||
bool m_doSendEvents;
|
|
||||||
/// Where does the current view start?
|
|
||||||
int m_ViewStartX; int m_ViewStartY;
|
|
||||||
/// Do we currently have the focus?
|
|
||||||
bool m_HaveFocus;
|
|
||||||
/// do we handle clicks of the right mouse button?
|
|
||||||
bool m_DoPopupMenu;
|
|
||||||
/// Should InternalPaint() scroll to cursor (VZ: seems unused any more)
|
|
||||||
bool m_ScrollToCursor;
|
|
||||||
/// Do we currently have a non-standard cursor?
|
|
||||||
bool m_HandCursor;
|
|
||||||
/// the menu
|
|
||||||
wxMenu * m_PopupMenu;
|
|
||||||
/// for derived classes, set when mouse is clicked
|
|
||||||
wxPoint m_ClickPosition;
|
|
||||||
/// for scrollbar calculations:
|
|
||||||
int m_maxx;
|
|
||||||
int m_maxy;
|
|
||||||
int m_lineHeight;
|
|
||||||
/** Visibility parameter for cursor. 0/1 as expected, -1: visible
|
|
||||||
on demand.
|
|
||||||
*/
|
|
||||||
int m_CursorVisibility;
|
|
||||||
private:
|
|
||||||
/// The layout list to be displayed.
|
|
||||||
wxLayoutList *m_llist;
|
|
||||||
/// Can user edit the window?
|
|
||||||
bool m_Editable;
|
|
||||||
/// Are we currently building a selection with the keyboard?
|
|
||||||
bool m_Selecting;
|
|
||||||
/// wrap margin
|
|
||||||
CoordType m_WrapMargin;
|
|
||||||
/// Is list dirty (for redraws, internal use)?
|
|
||||||
bool m_Dirty;
|
|
||||||
/// Has list been edited?
|
|
||||||
bool m_Modified;
|
|
||||||
wxMemoryDC *m_memDC;
|
|
||||||
wxBitmap *m_bitmap;
|
|
||||||
wxPoint m_bitmapSize;
|
|
||||||
/// A frame's statusbar to update
|
|
||||||
class wxStatusBar *m_StatusBar;
|
|
||||||
/// statusbar field for labels
|
|
||||||
int m_StatusFieldLabel;
|
|
||||||
/// statusbar field for cursor positions
|
|
||||||
int m_StatusFieldCursor;
|
|
||||||
/// a pointer to a bitmap for the background
|
|
||||||
wxBitmap *m_BGbitmap;
|
|
||||||
DECLARE_EVENT_TABLE()
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue
Block a user