Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Tutorials
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site













SourceForge.net Logo

WebWord

 

A word processor example demonstrating the Turtle GUI virtualization package.

Description

The reference shows usage of TURTLE. TURTLE is a thin JavaScript client to U++ based GUI server application. The page is by default available on following address: 127.0.0.1:8088. Of course firstly you need to compile the project and execute it.

WebWord can be launch in any browser that supports HTML5 and implements WebSocket protocol. The simplest examples of such browser are the latest versions of Firefox or Chrom.

Result

 

 

 

WebWord.h

 

#ifndef _WebWord_WebWord_h

#define _WebWord_WebWord_h

 

#ifdef flagTURTLEGUI

#include <Turtle/Turtle.h>

#else

#include <CtrlLib/CtrlLib.h>

#endif

 

#include <RichEdit/RichEdit.h>

#include <PdfDraw/PdfDraw.h>

 

namespace Upp {

 

class WebWord : public TopWindow {

public:

    typedef WebWord CLASSNAME;

    WebWord();

    void ShowInfo();

    

    RichEditWithToolBar  editor;

    StatusBar            statusbar;

};

 

}

#endif

 

 

 

main.cpp

 

#include "WebWord.h"

 

using namespace Upp;

 

String FormatSize(int64 n)

{

    if(n < 10000)

        return Format("%d B", n);

    else

    if(n < 10000 * 1024)

        return Format("%d.%d KB", n >> 10, (n & 1023) / 103);

    else

    if(n < I64(10000000) * 1024)

        return Format("%d.%d MB", n >> 20, (n & 1023) / 103);

    else

        return Format("%d.%d GB", n >> 30, (n & 1023) / 103);

}

 

void WebWord::ShowInfo()

{

    String s;

    s << "Mem " << MemoryUsedKb() << " KB";

    static int sent_prev;

#ifdef flagTURTLEGUI

    int secs = GetSysTime() - TurtleServer::stat_started;

    Time tm = Time(1, 1, 1, 0, 0, 0) + secs;

    s << ", uptime " << Format("%d:%0d:%02d:%02d", tm - Date(1, 1, 1), tm.hour, tm.minute, tm.second);

    s << ", data sent " << FormatSize(TurtleServer::stat_data_send);

    if(secs)

        s << ", average bandwidth " << FormatSize(TurtleServer::stat_data_send / secs) << "/s";

    s << ", actual bandwidth " << FormatSize(TurtleServer::stat_data_send - sent_prev);

    s << ", putimage " << TurtleServer::stat_putimage;

    s << ", putrect " << TurtleServer::stat_putrect;

    s << ", setimage " << TurtleServer::stat_setimage << " len " << FormatSize(TurtleServer::stat_setimage_len);

    s << ", roundtrip " << TurtleServer::stat_roundtrip_ms << " ms";

    s << ", client " << TurtleServer::stat_client_ms << " ms";

#ifdef PLATFORM_POSIX

    s << ", cpu time " << int((double) clock() / CLOCKS_PER_SEC * 1000) << " ms";

#endif

    sent_prev = TurtleServer::stat_data_send;

    statusbar.Set(s);

#endif

}

 

WebWord::WebWord()

{

    AddFrame(statusbar);

    Add(editor.SizePos());

    Sizeable().Zoomable();

//    FrameLess();

    Maximize();

    Title("WebWord");

    Icon(CtrlImg::File());

    editor.ClearModify();

    ActiveFocus(editor);

    SetTimeCallback(-1000, THISBACK(ShowInfo));

}

 

void AppMainLoop()

{

    // "Main" stuff should go in here...

 

    WebWord().Run();

}

 

#ifdef flagTURTLEGUI

 

CONSOLE_APP_MAIN

{

 

#ifdef _DEBUG

    TurtleServer::DebugMode();

#endif

 

    // MemoryLimitKb(100000000); // Can aid preventing DDoS attacks.

 

    TurtleServer guiserver;

    guiserver.Host("localhost");

    guiserver.Port(8888);

    guiserver.MaxConnections(100);

    RunTurtleGui(guiserver, AppMainLoop);

}

 

#else

 

GUI_APP_MAIN

{

    AppMainLoop();

}

 

#endif

 

 

 

 

 

Do you want to contribute?