aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--qbuffers.cpp57
-rw-r--r--qbuffers.h45
2 files changed, 67 insertions, 35 deletions
diff --git a/qbuffers.cpp b/qbuffers.cpp
index 1647ef3..c8a43ba 100644
--- a/qbuffers.cpp
+++ b/qbuffers.cpp
@@ -107,6 +107,22 @@ QRegister::get_string(void)
return str;
}
+void
+QRegister::edit(void)
+{
+ interface.ssm(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
+ interface.ssm(SCI_GOTOPOS, dot);
+ interface.info_update(this);
+}
+
+void
+QRegister::undo_edit(void)
+{
+ interface.undo_info_update(this);
+ undo.push_msg(SCI_GOTOPOS, dot);
+ undo.push_msg(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
+}
+
bool
QRegister::load(const gchar *filename)
{
@@ -132,6 +148,28 @@ QRegister::load(const gchar *filename)
return true;
}
+gchar *
+QRegisterBufferInfo::get_string(void)
+{
+ gchar *filename = ring.current ? ring.current->filename : NULL;
+
+ return g_strdup(filename ? : "");
+}
+
+void
+QRegisterBufferInfo::edit(void)
+{
+ gchar *filename = ring.current ? ring.current->filename : NULL;
+
+ QRegister::edit();
+
+ interface.ssm(SCI_BEGINUNDOACTION);
+ interface.ssm(SCI_SETTEXT, 0, (sptr_t)(filename ? : ""));
+ interface.ssm(SCI_ENDUNDOACTION);
+
+ undo.push_msg(SCI_UNDO);
+}
+
void
QRegisterTable::initialize(void)
{
@@ -143,8 +181,8 @@ QRegisterTable::initialize(void)
/* search string and status register */
initialize_register("_");
- /* current buffer name and number */
- initialize_register("*");
+ /* current buffer name and number ("*") */
+ insert(new QRegisterBufferInfo());
}
void
@@ -295,24 +333,9 @@ Ring::edit(const gchar *filename)
}
}
- /* TODO: set integer part */
- qregisters["*"]->set_string(current->filename);
-
return new_in_ring;
}
-void
-Ring::undo_edit(void)
-{
- current->dot = interface.ssm(SCI_GETCURRENTPOS);
-
- undo.push_var<Buffer*>(current);
- current->undo_edit();
-
- /* TODO: undo integer part */
- qregisters["*"]->undo_set_string();
-}
-
#if 0
/*
diff --git a/qbuffers.h b/qbuffers.h
index 2eea797..eae6554 100644
--- a/qbuffers.h
+++ b/qbuffers.h
@@ -41,6 +41,7 @@ public:
QRegister(const gchar *_name)
: name(g_strdup(_name)), integer(0), string(NULL), dot(0) {}
+ virtual
~QRegister()
{
if (string)
@@ -62,24 +63,12 @@ public:
return string;
}
- void set_string(const gchar *str);
- void undo_set_string(void);
- gchar *get_string(void);
+ virtual void set_string(const gchar *str);
+ virtual void undo_set_string(void);
+ virtual gchar *get_string(void);
- inline void
- edit(void)
- {
- interface.ssm(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
- interface.ssm(SCI_GOTOPOS, dot);
- interface.info_update(this);
- }
- inline void
- undo_edit(void)
- {
- interface.undo_info_update(this);
- undo.push_msg(SCI_GOTOPOS, dot);
- undo.push_msg(SCI_SETDOCPOINTER, 0, (sptr_t)get_document());
- }
+ virtual void edit(void);
+ virtual void undo_edit(void);
bool load(const gchar *filename);
inline void
@@ -89,6 +78,20 @@ public:
}
};
+class QRegisterBufferInfo : public QRegister {
+public:
+ QRegisterBufferInfo() : QRegister("*")
+ {
+ get_document();
+ }
+
+ void set_string(const gchar *str) {}
+ void undo_set_string(void) {}
+ gchar *get_string(void);
+
+ void edit(void);
+};
+
extern class QRegisterTable : public RBTree {
inline void
initialize_register(const gchar *name)
@@ -283,7 +286,13 @@ public:
bool is_any_dirty(void);
bool edit(const gchar *filename);
- void undo_edit(void);
+ inline void
+ undo_edit(void)
+ {
+ current->dot = interface.ssm(SCI_GETCURRENTPOS);
+ undo.push_var(current);
+ current->undo_edit();
+ }
bool save(const gchar *filename);