//=============================================================================
// Project:     FLTK
// Module:      editor.c
// Copyright:   Chilin Co. 2008
// Author:      enos
// Date:        January 31, 2008
//=============================================================================
// Description:
//
//=============================================================================
#include      // syslog
#include      // malloc, free
#include     // serial
#include       // O_NONBLOCK
#include       // errno
#include      // memset
#include       // printf

/*****************************************************************************
 * Application specific include file
 *****************************************************************************/
#include
#include
#include
#include

/*****************************************************************************
 * local definition
 *****************************************************************************/
#undef DEBUG
//#define DEBUG(arg...)   fprintf(stderr, ##arg);
#define DEBUG(arg...)   syslog(LOG_USER|LOG_ERR,##arg);
#define ERROR(arg...)   syslog(LOG_USER|LOG_ERR,##arg);

#define MENU_X          0
#define MENU_Y          0
#define MENU_WIDTH      600
#define MENU_HEIGHT     30
#define EDITOR_X        MENU_X
#define EDITOR_Y        (MENU_Y+MENU_HEIGHT)
#define EDITOR_WIDTH    MENU_WIDTH
#define EDITOR_HEIGHT   370
#define WIN_WIDTH       MENU_WIDTH
#define WIN_HEIGHT      (MENU_HEIGHT+EDITOR_HEIGHT)
/*****************************************************************************
 * local variable
 *****************************************************************************/
Fl_Double_Window    *win;
Fl_Text_Editor      *editor;
Fl_Text_Buffer      *textbuf;

/*****************************************************************************
 * Author:      enos
 * Function:    changed_cb
 * Description:
 * Version:
 *****************************************************************************/
void changed_cb(int pos, int nInserted, int nDeleted,int, const char*, void* v)
{
    // 滾動視窗至插入位置.
    editor->show_insert_position();
    // 加入此行可以顯示整行,避免中文字被截斷顯示,造成顯示錯誤.
    editor->redisplay_range(textbuf->line_start(pos), textbuf->line_end(pos));
}
/*****************************************************************************
 * Author:      enos
 * Function:    main
 * Description:
 * Version:
 *****************************************************************************/
int main(int argc, char **argv)
{
    win = new Fl_Double_Window(WIN_WIDTH, WIN_HEIGHT);
    win->begin();
        textbuf = new Fl_Text_Buffer();
        textbuf->add_modify_callback(changed_cb, win);

        editor  = new Fl_Text_Editor(EDITOR_X, EDITOR_Y, EDITOR_WIDTH, EDITOR_HEIGHT);
        editor->buffer(textbuf);
        editor->textfont(FL_COURIER);
    win->end();
    win->show(argc, argv);
    return Fl::run();
}

台南小新 發表在 痞客邦 PIXNET 留言(0) 人氣()