SYS: Buffer anchor mechanism first step

This commit is contained in:
Edouard Dupin 2011-09-11 22:46:36 +02:00
parent bdc4793955
commit 2712d4f67d
9 changed files with 113 additions and 85 deletions

View File

@ -178,6 +178,7 @@ CXXFILES+= CustumWidget/BufferView/BufferView.cpp \
# Basic Interface : # Basic Interface :
CXXFILES+= Buffer/Buffer.cpp \ CXXFILES+= Buffer/Buffer.cpp \
Buffer/BufferAnchor.cpp \
Buffer/BufferText.cpp \ Buffer/BufferText.cpp \
Buffer/BufferEmpty.cpp \ Buffer/BufferEmpty.cpp \
Buffer/BufferManager.cpp \ Buffer/BufferManager.cpp \

View File

@ -235,7 +235,6 @@ void Buffer::ScrollUp(void)
// nothing to do // nothing to do
} }
/** /**
* @brief * @brief
* *
@ -244,13 +243,6 @@ void Buffer::ScrollUp(void)
* @return --- * @return ---
* *
*/ */
void Buffer::ForceReDraw(bool allElement)
{
// nothing to do
}
void Buffer::cursorMove(int32_t gtkKey) void Buffer::cursorMove(int32_t gtkKey)
{ {
// nothing to do // nothing to do

View File

@ -30,7 +30,7 @@
#include "Display.h" #include "Display.h"
#include "charset.h" #include "charset.h"
#include "Edn.h" #include "Edn.h"
#include "BufferAnchor.h"
typedef struct{ typedef struct{
uint32_t nbTotalLine; //!< Number of line in the buffer uint32_t nbTotalLine; //!< Number of line in the buffer
@ -82,7 +82,6 @@ class Buffer {
virtual void SetLineDisplay(uint32_t lineNumber); virtual void SetLineDisplay(uint32_t lineNumber);
virtual int32_t Display(DrawerManager &drawer); virtual int32_t Display(DrawerManager &drawer);
virtual void ForceReDraw(bool allElement);
virtual void AddChar(char * UTF8data); virtual void AddChar(char * UTF8data);
virtual void cursorMove(int32_t gtkKey); virtual void cursorMove(int32_t gtkKey);
virtual void MouseSelectFromCursorTo(int32_t width, int32_t height); virtual void MouseSelectFromCursorTo(int32_t width, int32_t height);

View File

@ -0,0 +1,38 @@
/**
*******************************************************************************
* @file BufferAnchor.cpp
* @brief Editeur De N'ours : anchor on a secific buffer (Sources)
* @author Edouard DUPIN
* @date 11/09/2011
* @par Project
* Edn
*
* @par Copyright
* Copyright 2010 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
* You can not earn money with this Software (if the source extract from Edn
* represent less than 50% of original Sources)
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#include "BufferAnchor.h"
BufferAnchor::BufferAnchor(void)
{
}
BufferAnchor::~BufferAnchor(void)
{
}

View File

@ -0,0 +1,56 @@
/**
*******************************************************************************
* @file BufferAnchor.h
* @brief Editeur De N'ours : anchor on a secific buffer (header)
* @author Edouard DUPIN
* @date 11/09/2011
* @par Project
* Edn
*
* @par Copyright
* Copyright 2010 Edouard DUPIN, all right reserved
*
* This software is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY.
*
* Licence summary :
* You can modify and redistribute the sources code and binaries.
* You can send me the bug-fix
* You can not earn money with this Software (if the source extract from Edn
* represent less than 50% of original Sources)
* Term of the licence in in the file licence.txt.
*
*******************************************************************************
*/
#ifndef __BUFFER_ANCHOR_H__
#define __BUFFER_ANCHOR_H__
#include "Display.h"
#include "charset.h"
#include "Edn.h"
class BufferAnchor
{
public :
BufferAnchor(void);
~BufferAnchor(void);
MoveAnchor(int32_t offsetLine);
//BufModification(...);
DisplayUpdateFirstLine(void);
DisplayUpdateNextLine(void);
private :
int32_t m_lineId;
int32_t m_bufferPos;
public:
int32_t m_lineNumber;
int32_t m_posStart;
int32_t m_posStop;
int32_t m_selectionPosStart;
int32_t m_selectionPosStop;
};
#endif

View File

@ -52,7 +52,6 @@ extern "C"
*/ */
void BufferText::BasicInit(void) void BufferText::BasicInit(void)
{ {
NeedToCleanEndPage = true;
// set the first element that is displayed // set the first element that is displayed
m_displayStartBufferPos = 0; m_displayStartBufferPos = 0;
@ -72,7 +71,6 @@ void BufferText::BasicInit(void)
m_displayStart.y = 0; m_displayStart.y = 0;
m_displaySize.x = 200; m_displaySize.x = 200;
m_displaySize.y = 20; m_displaySize.y = 20;
m_displayLocalSyntax.idSequence = -1;
} }
@ -660,7 +658,6 @@ void BufferText::ScrollUp(void)
*/ */
void BufferText::MoveUpDown(int32_t ofset) void BufferText::MoveUpDown(int32_t ofset)
{ {
m_displayLocalSyntax.idSequence = -1;
if (ofset >= 0) { if (ofset >= 0) {
int32_t nbLine = m_EdnBuf.NumberOfLines(); int32_t nbLine = m_EdnBuf.NumberOfLines();
if (m_displayStart.y+ofset+3 > nbLine) { if (m_displayStart.y+ofset+3 > nbLine) {
@ -683,21 +680,6 @@ void BufferText::MoveUpDown(int32_t ofset)
} }
/**
* @brief
*
* @param[in,out] ---
*
* @return ---
*
*/
void BufferText::ForceReDraw(bool allElement)
{
NeedToCleanEndPage = true;
//m_displayLocalSyntax.idSequence = -1;
}
void BufferText::SetInsertPosition(int32_t newPos, bool insertChar) void BufferText::SetInsertPosition(int32_t newPos, bool insertChar)
{ {
int32_t SelectionStart, SelectionEnd, SelectionRectStart, SelectionRectEnd; int32_t SelectionStart, SelectionEnd, SelectionRectStart, SelectionRectEnd;

View File

@ -35,37 +35,7 @@ typedef enum {
CURSOR_DISPLAY_MODE_INSERT, CURSOR_DISPLAY_MODE_INSERT,
CURSOR_DISPLAY_MODE_NOT_FOCUS, CURSOR_DISPLAY_MODE_NOT_FOCUS,
} cursorDisplayMode_te; } cursorDisplayMode_te;
#if 0
class colorPalette {
private :
ColorizeManager * m_colorManager;
public :
color_ts & colorSpace;
color_ts & colorTab;
color_ts & colorLineNumber;
Colorize * colorNormal;
Colorize * colorSel;
Colorize * colorCurrent;
public :
colorPalette(void):
m_colorManager(ColorizeManager::getInstance()),
colorSpace(m_colorManager->Get(COLOR_CODE_SPACE)),
colorTab(m_colorManager->Get(COLOR_CODE_TAB)),
colorLineNumber(m_colorManager->Get(COLOR_CODE_LINE_NUMBER)),
{
/*
ColorizeManager * m_colorManager = ColorizeManager::getInstance();
colorSpace = m_colorManager->Get(COLOR_CODE_SPACE);
colorTab = m_colorManager->Get(COLOR_CODE_TAB);
colorLineNumber = m_colorManager->Get(COLOR_CODE_LINE_NUMBER);
*/
colorNormal = m_colorManager->Get("normal");
colorSel = m_colorManager->Get("SelectedText");
}
} colorPalette_ts;
#endif
class BufferText : public Buffer { class BufferText : public Buffer {
public: public:
@ -78,7 +48,6 @@ class BufferText : public Buffer {
void SetLineDisplay(uint32_t lineNumber); void SetLineDisplay(uint32_t lineNumber);
int32_t Display(DrawerManager &drawer); int32_t Display(DrawerManager &drawer);
void ForceReDraw(bool allElement);
void AddChar(char * UTF8data); void AddChar(char * UTF8data);
void cursorMove(int32_t gtkKey); void cursorMove(int32_t gtkKey);
void MouseSelectFromCursorTo(int32_t width, int32_t height); void MouseSelectFromCursorTo(int32_t width, int32_t height);
@ -107,25 +76,32 @@ class BufferText : public Buffer {
protected: protected:
void NameChange(void); void NameChange(void);
// anchor section
public:
void AnchorAdd(int32_t anchorID);
void AnchorRm(int32_t anchorID);
private:
Edn::VectorType<BufferAnchor *> m_AnchorList; //!< list of all line anchor in the current buffer
private: private:
// Display // Display
bool NeedToCleanEndPage; //!< if true, the end of the page need to be clean (arrive after a remove line)
ColorizeManager * myColorManager; //!< for the background color : ColorizeManager * myColorManager; //!< for the background color :
int32_t m_nbColoneForLineNumber; //!< number of colomn use for linenumber display int32_t m_nbColoneForLineNumber; //!< number of colomn use for linenumber display
// Direct buffer IO // Direct buffer IO
EdnBuf m_EdnBuf; //!< buffer associated on this displayer EdnBuf m_EdnBuf; //!< buffer associated on this displayer
position_ts m_displayStart; //!< position where the display is starting position_ts m_displayStart; //!< position where the display is starting
position_ts m_displaySize; //!< number of char displayable in the screan position_ts m_displaySize; //!< number of char displayable in the screan
int32_t m_displayStartBufferPos; //!< position where the buffer start int32_t m_displayStartBufferPos; //!< position where the buffer start
// Cursor : // Cursor :
int32_t m_cursorPos; //!< position in the buffer of the cursor int32_t m_cursorPos; //!< position in the buffer of the cursor
int32_t m_cursorPreferredCol; //!< colomn of the last up and down ... int32_t m_cursorPreferredCol; //!< colomn of the last up and down ...
bool m_cursorOn; //!< the blink of the cursor ... bool m_cursorOn; //!< the blink of the cursor ...
cursorDisplayMode_te m_cursorMode; //!< type of cursor Selected cursorDisplayMode_te m_cursorMode; //!< type of cursor Selected
displayHLData_ts m_displayLocalSyntax; //!< for the display of the local elements (display HL mode)
// internal function // internal function
void BasicInit(void); void BasicInit(void);
void UpdateWindowsPosition(bool centerPage = false); void UpdateWindowsPosition(bool centerPage = false);
@ -147,6 +123,7 @@ class BufferText : public Buffer {
void DrawLineNumber(DrawerManager &drawer, int32_t lineNumber); void DrawLineNumber(DrawerManager &drawer, int32_t lineNumber);
void UpdatePointerNumber(void); void UpdatePointerNumber(void);
void DrawLine(DrawerManager &drawer, int32_t lineNumber, int32_t startPos, int32_t endPos, int32_t selStartPos, int32_t selEndPos); void DrawLine(DrawerManager &drawer, int32_t lineNumber, int32_t startPos, int32_t endPos, int32_t selStartPos, int32_t selEndPos);
//void DrawLine(DrawerManager &drawer, int32_t lineNumber, int32_t startPos, int32_t endPos, int32_t selStartPos, int32_t selEndPos);
}; };

View File

@ -99,7 +99,6 @@ void CodeView::OnMessage(int32_t id, int32_t dataID)
case EDN_MSG__CURRENT_CHANGE_BUFFER_ID: case EDN_MSG__CURRENT_CHANGE_BUFFER_ID:
//EDN_INFO("Select a new Buffer ... " << dataID); //EDN_INFO("Select a new Buffer ... " << dataID);
m_bufferID = dataID; m_bufferID = dataID;
m_bufferManager->Get(m_bufferID)->ForceReDraw(true);
// request the dispplay of the curent Editor // request the dispplay of the curent Editor
SendMessage(EDN_MSG__BUFFER_CHANGE_CURRENT, m_bufferID); SendMessage(EDN_MSG__BUFFER_CHANGE_CURRENT, m_bufferID);
break; break;
@ -197,6 +196,7 @@ gboolean CodeView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, gpo
# ifdef USE_GTK_VERSION_3_0 # ifdef USE_GTK_VERSION_3_0
GtkAllocation allocation; GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation); gtk_widget_get_allocation(widget, &allocation);
EDN_INFO("GTK+ request a diplay of : "<< allocation.width <<"px * "<< allocation.height <<"px");
bool needRedrawAll = false; bool needRedrawAll = false;
if (self->m_shawableAreaX != allocation.width) { if (self->m_shawableAreaX != allocation.width) {
needRedrawAll = true; needRedrawAll = true;
@ -207,6 +207,7 @@ gboolean CodeView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, gpo
self->m_shawableAreaY = allocation.height; self->m_shawableAreaY = allocation.height;
} }
# elif defined( USE_GTK_VERSION_2_0) # elif defined( USE_GTK_VERSION_2_0)
EDN_INFO("GTK+ request a diplay of : "<< widget->allocation.width <<"px * "<< widget->allocation.height <<"px");
bool needRedrawAll = false; bool needRedrawAll = false;
if (self->m_shawableAreaX != widget->allocation.width) { if (self->m_shawableAreaX != widget->allocation.width) {
needRedrawAll = true; needRedrawAll = true;
@ -217,26 +218,15 @@ gboolean CodeView::CB_displayDraw( GtkWidget *widget, GdkEventExpose *event, gpo
self->m_shawableAreaY = widget->allocation.height; self->m_shawableAreaY = widget->allocation.height;
} }
# endif # endif
if (true == needRedrawAll) { EDN_INFO("Edn request a display of : " << self->m_shawableAreaX << "px * "<< self->m_shawableAreaY<<"px");
//updateScrollElement();
self->m_bufferManager->Get(self->m_bufferID)->ForceReDraw(true);
}
EDN_INFO("Request a display of : " << self->m_shawableAreaX << "px * "<< self->m_shawableAreaY<<"px");
/*
EDN_INFO("widget width=%d", widget->allocation.width);
EDN_INFO("widget height=%d", widget->allocation.height);
*/
//EDN_INFO("BufferView Display");
// Get the color Manager : // Get the color Manager :
ColorizeManager *myColorManager = NULL; ColorizeManager *myColorManager = NULL;
myColorManager = ColorizeManager::getInstance(); myColorManager = ColorizeManager::getInstance();
//(void)m_bufferManager->Get(m_bufferID)->Display(m_displayParameters, m_shawableAreaX, m_shawableAreaY);
DrawerManager monDrawer(widget, self->m_shawableAreaX, self->m_shawableAreaY); DrawerManager monDrawer(widget, self->m_shawableAreaX, self->m_shawableAreaY);
//EDN_INFO("Display buffer ID = " << m_bufferID); //EDN_INFO("Display buffer ID = " << m_bufferID);
(void)self->m_bufferManager->Get(self->m_bufferID)->Display(monDrawer); (void)self->m_bufferManager->Get(self->m_bufferID)->Display(monDrawer);
// EDN_WARNING("Must display here ... ");
return TRUE; return TRUE;
} }
@ -250,22 +240,15 @@ gboolean CodeView::CB_displayInit( GtkWidget *widget, gpointer data)
# ifdef USE_GTK_VERSION_3_0 # ifdef USE_GTK_VERSION_3_0
GtkAllocation allocation; GtkAllocation allocation;
gtk_widget_get_allocation(widget, &allocation); gtk_widget_get_allocation(widget, &allocation);
int32_t size_x = allocation.width; EDN_INFO("GTK+ request a diplay of : "<< allocation.width <<"px * "<< allocation.height <<"px");
int32_t size_y = allocation.height;
self->m_shawableAreaX = allocation.width; self->m_shawableAreaX = allocation.width;
self->m_shawableAreaY = allocation.height; self->m_shawableAreaY = allocation.height;
# elif defined( USE_GTK_VERSION_2_0) # elif defined( USE_GTK_VERSION_2_0)
int32_t size_x = widget->allocation.width; EDN_INFO("GTK+ request a diplay of : "<< widget->allocation.width <<"px * "<< widget->allocation.height <<"px");
int32_t size_y = widget->allocation.height;
self->m_shawableAreaX = widget->allocation.width; self->m_shawableAreaX = widget->allocation.width;
self->m_shawableAreaY = widget->allocation.height; self->m_shawableAreaY = widget->allocation.height;
# endif # endif
EDN_INFO("Request a diplay of : "<< size_x <<"px * "<< size_y <<"px");
gtk_widget_queue_draw( widget ); gtk_widget_queue_draw( widget );
return TRUE; return TRUE;
} }

View File

@ -1,7 +1,7 @@
# action a faire (ordonner par révision) : # action a faire (ordonner par révision) :
* 0.2.X : * 0.2.X :
- gui : Amelioration du full-screen et du display de base (sans l'entete de la fenetre) - gui : Amelioration du full-screen et du display de base (sans l'entete de la fenetre)
- gui : Mise en place d'un display ligne par ligne - gui : display partielle de la fenetre
- gui : ascenceur quand nécessaire - gui : ascenceur quand nécessaire
- gui : Demander la création de nouveaux fichier quand il n'existe pas (a l'ouverture en ligne de commande) - gui : Demander la création de nouveaux fichier quand il n'existe pas (a l'ouverture en ligne de commande)
- sys : Mise en place des colorisation de base pour le - sys : Mise en place des colorisation de base pour le