From 4ff36822610bdf00be471ae58aa324ce678bf56f Mon Sep 17 00:00:00 2001 From: cxl Date: Mon, 13 Jun 2011 19:21:09 +0000 Subject: [PATCH] .developing rainbow git-svn-id: svn://ultimatepp.org/upp/trunk@3530 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- rainbow/UWord/UWord.cpp | 271 +++++++++++++++++++++ rainbow/UWord/UWord.iml | 10 + rainbow/UWord/UWord.upp | 17 ++ rainbow/UWord/icon.ico | Bin 0 -> 6 bytes rainbow/UWord/init | 8 + rainbow/WinAlt/WinAlt.h | 2 +- rainbow/WinAlt/WinAlt.upp | 10 +- rainbow/WinAlt/{WinAltGuiA.h => WinAltA.h} | 0 8 files changed, 312 insertions(+), 6 deletions(-) create mode 100644 rainbow/UWord/UWord.cpp create mode 100644 rainbow/UWord/UWord.iml create mode 100644 rainbow/UWord/UWord.upp create mode 100644 rainbow/UWord/icon.ico create mode 100644 rainbow/UWord/init rename rainbow/WinAlt/{WinAltGuiA.h => WinAltA.h} (100%) diff --git a/rainbow/UWord/UWord.cpp b/rainbow/UWord/UWord.cpp new file mode 100644 index 000000000..2a5ea1b77 --- /dev/null +++ b/rainbow/UWord/UWord.cpp @@ -0,0 +1,271 @@ +#include +#include + +using namespace Upp; + +#define IMAGECLASS UWordImg +#define IMAGEFILE +#include + +FileSel& UWordFs() +{ + static FileSel fs; + return fs; +} + +FileSel& PdfFs() +{ + static FileSel fs; + return fs; +} + +class UWord : public TopWindow { +public: + virtual void DragAndDrop(Point, PasteClip& d); + virtual void FrameDragAndDrop(Point, PasteClip& d); + +protected: + RichEdit editor; + MenuBar menubar; + ToolBar toolbar; + StatusBar statusbar; + String filename; + + static LRUList& lrufile() { static LRUList l; return l; } + + void Load(const String& filename); + void OpenFile(const String& fn); + void New(); + void Open(); + void Save0(); + void Save(); + void SaveAs(); + void Print(); + void Pdf(); + void About(); + void Destroy(); + void SetBar(); + void FileBar(Bar& bar); + void AboutMenu(Bar& bar); + void MainMenu(Bar& bar); + void MainBar(Bar& bar); + +public: + typedef UWord CLASSNAME; + + static void SerializeApp(Stream& s); + + UWord(); +}; + +void UWord::FileBar(Bar& bar) +{ + bar.Add("New", CtrlImg::new_doc(), THISBACK(New)) + .Key(K_CTRL_N) + .Help("Open new window"); + bar.Add("Open..", CtrlImg::open(), THISBACK(Open)) + .Key(K_CTRL_O) + .Help("Open existing document"); + bar.Add(editor.IsModified(), "Save", CtrlImg::save(), THISBACK(Save)) + .Key(K_CTRL_S) + .Help("Save current document"); + bar.Add("SaveAs", CtrlImg::save_as(), THISBACK(SaveAs)) + .Help("Save current document with a new name"); + bar.ToolGap(); + bar.MenuSeparator(); + bar.Add("Print..", CtrlImg::print(), THISBACK(Print)) + .Key(K_CTRL_P) + .Help("Print document"); + bar.Add("Export to PDF..", UWordImg::pdf(), THISBACK(Pdf)) + .Help("Export document to PDF file"); + if(bar.IsMenuBar()) { + if(lrufile().GetCount()) + lrufile()(bar, THISBACK(OpenFile)); + bar.Separator(); + bar.Add("Exit", THISBACK(Destroy)); + } +} + +void UWord::AboutMenu(Bar& bar) +{ + bar.Add("About..", THISBACK(About)); +} + +void UWord::MainMenu(Bar& bar) +{ + bar.Add("File", THISBACK(FileBar)); + bar.Add("Window", callback(WindowsMenu)); + bar.Add("Help", THISBACK(AboutMenu)); +} + +void UWord::New() +{ + new UWord; +} + +void UWord::Load(const String& name) +{ + lrufile().NewEntry(name); + editor.SetQTF(LoadFile(name)); + filename = name; + editor.ClearModify(); + Title(filename); +} + +void UWord::OpenFile(const String& fn) +{ + if(filename.IsEmpty() && !editor.IsModified()) + Load(fn); + else + (new UWord)->Load(fn); +} + +void UWord::Open() +{ + FileSel& fs = UWordFs(); + if(fs.ExecuteOpen()) + OpenFile(fs); + else + statusbar.Temporary("Loading aborted."); +} + +void UWord::DragAndDrop(Point, PasteClip& d) +{ + if(AcceptFiles(d)) { + Vector fn = GetFiles(d); + for(int i = 0; i < fn.GetCount(); i++) + if(FileExists(fn[i])) + OpenFile(fn[i]); + } +} + +void UWord::FrameDragAndDrop(Point p, PasteClip& d) +{ + DragAndDrop(p, d); +} + +void UWord::Save0() +{ + lrufile().NewEntry(filename); + if(filename.IsEmpty()) + SaveAs(); + else + if(SaveFile(filename, editor.GetQTF())) { + statusbar.Temporary("File " + filename + " was saved."); + ClearModify(); + } + else + Exclamation("Error saving the file [* " + DeQtf(filename) + "]!"); +} + +void UWord::Save() +{ + if(!editor.IsModified()) return; + Save0(); +} + +void UWord::SaveAs() +{ + FileSel& fs = UWordFs(); + if(fs.ExecuteSaveAs()) { + filename = fs; + Title(filename); + Save0(); + } +} + +void UWord::Print() +{ + editor.Print(); +} + +void UWord::Pdf() +{ + FileSel& fs = PdfFs(); + if(!fs.ExecuteSaveAs("Output PDF file")) + return; + Size page = Size(3968, 6074); + PdfDraw pdf; + UPP::Print(pdf, editor.Get(), page); + SaveFile(~fs, pdf.Finish()); +} + +void UWord::About() +{ + PromptOK("[A5 uWord]&Using [*^www://upp.sf.net^ Ultimate`+`+] technology."); +} + +void UWord::Destroy() +{ + if(editor.IsModified()) { + switch(PromptYesNoCancel("Do you want to save the changes to the document?")) { + case 1: + Save(); + break; + case -1: + return; + } + } + delete this; +} + +void UWord::MainBar(Bar& bar) +{ + FileBar(bar); + bar.Separator(); + editor.DefaultBar(bar); +} + +void UWord::SetBar() +{ + toolbar.Set(THISBACK(MainBar)); +} + +UWord::UWord() +{ + AddFrame(menubar); + AddFrame(TopSeparatorFrame()); + AddFrame(toolbar); + AddFrame(statusbar); + Add(editor.SizePos()); + menubar.Set(THISBACK(MainMenu)); + Sizeable().Zoomable(); + WhenClose = THISBACK(Destroy); + menubar.WhenHelp = toolbar.WhenHelp = statusbar; + static int doc; + Title(Format("Document%d", ++doc)); + Icon(CtrlImg::File()); + editor.ClearModify(); + SetBar(); + editor.WhenRefreshBar = THISBACK(SetBar); + OpenMain(); + ActiveFocus(editor); +} + +void UWord::SerializeApp(Stream& s) +{ + int version = 1; + s / version; + s % UWordFs() + % PdfFs(); + if(version >= 1) + s % lrufile(); +} + +GUI_APP_MAIN +{ + SetLanguage(LNG_ENGLISH); + SetDefaultCharset(CHARSET_UTF8); + + UWordFs().Type("QTF files", "*.qtf") + .AllFilesType() + .DefaultExt("qtf"); + PdfFs().Type("PDF files", "*.pdf") + .AllFilesType() + .DefaultExt("pdf"); + + LoadFromFile(callback(UWord::SerializeApp)); + new UWord; + Ctrl::EventLoop(); + StoreToFile(callback(UWord::SerializeApp)); +} diff --git a/rainbow/UWord/UWord.iml b/rainbow/UWord/UWord.iml new file mode 100644 index 000000000..c5087e8d2 --- /dev/null +++ b/rainbow/UWord/UWord.iml @@ -0,0 +1,10 @@ +PREMULTIPLIED +IMAGE_ID(pdf) + +IMAGE_BEGIN_DATA +IMAGE_DATA(120,156,157,146,129,13,192,32,8,4,29,193,1,216,67,23,113,16,55,112,186,14,226,34,212,198,154,98,85,16,63,33) +IMAGE_DATA(132,196,227,5,53,214,88,195,8,149,49,240,184,25,75,190,41,198,122,118,81,179,188,247,237,80,205,0,125,173,245,255) +IMAGE_DATA(231,222,31,6,158,206,42,251,103,210,99,206,79,238,67,120,36,61,242,193,254,145,244,240,111,214,254,131,22,151,115,206) +IMAGE_DATA(227,134,86,254,185,232,128,255,230,223,208,99,193,238,95,96,161,188,39,251,254,2,27,66,144,255,31,195,166,148,150,188) +IMAGE_DATA(38,110,182,2,234,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +IMAGE_END_DATA(160, 1) diff --git a/rainbow/UWord/UWord.upp b/rainbow/UWord/UWord.upp new file mode 100644 index 000000000..7b6560875 --- /dev/null +++ b/rainbow/UWord/UWord.upp @@ -0,0 +1,17 @@ +description "Wordprocessor application\377"; + +uses + CtrlLib, + RichEdit, + PdfDraw, + plugin\jpg, + WinAlt; + +file + UWord.cpp, + UWord.iml; + +mainconfig + "" = "GUI", + "" = "GUI .NOGTK"; + diff --git a/rainbow/UWord/icon.ico b/rainbow/UWord/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4012786aaf7d31ccf7f963c14aae96e0b80b9f39 GIT binary patch literal 6 NcmZQzU}Rum0000A00IC2 literal 0 HcmV?d00001 diff --git a/rainbow/UWord/init b/rainbow/UWord/init new file mode 100644 index 000000000..f616f757e --- /dev/null +++ b/rainbow/UWord/init @@ -0,0 +1,8 @@ +#ifndef _UWord_icpp_init_stub +#define _UWord_icpp_init_stub +#include "CtrlLib/init" +#include "RichEdit/init" +#include "PdfDraw/init" +#include "plugin\jpg/init" +#include "WinAlt/init" +#endif diff --git a/rainbow/WinAlt/WinAlt.h b/rainbow/WinAlt/WinAlt.h index 671bf13ad..f7feeec78 100644 --- a/rainbow/WinAlt/WinAlt.h +++ b/rainbow/WinAlt/WinAlt.h @@ -382,4 +382,4 @@ public: END_UPP_NAMESPACE -#define GUIPLATFORM_INCLUDE_AFTER +#define GUIPLATFORM_INCLUDE_AFTER diff --git a/rainbow/WinAlt/WinAlt.upp b/rainbow/WinAlt/WinAlt.upp index c014305f6..9d8732b8b 100644 --- a/rainbow/WinAlt/WinAlt.upp +++ b/rainbow/WinAlt/WinAlt.upp @@ -1,6 +1,6 @@ file WinAlt.h, - WinAltGuiA.h, + WinAltA.h, WinAltKeys.h, DrawOpWinAlt.cpp, DrawTextWinAlt.cpp, @@ -9,11 +9,11 @@ file UtilWinAlt.cpp, WinAltCtrl.h, WinAltCtrl.cpp, - TopWinAlt.cpp, - WinAltTop.h, - WinAltClip.cpp, - WinAltDnD.cpp, WinAltProc.cpp, WinAltWnd.cpp, + WinAltTop.h, + TopWinAlt.cpp, + WinAltClip.cpp, + WinAltDnD.cpp, ChSysInit.cpp; diff --git a/rainbow/WinAlt/WinAltGuiA.h b/rainbow/WinAlt/WinAltA.h similarity index 100% rename from rainbow/WinAlt/WinAltGuiA.h rename to rainbow/WinAlt/WinAltA.h