新增Ansi編輯器

429 views
Skip to first unread message

Roy Lu

unread,
Apr 4, 2014, 12:18:18 PM4/4/14
to pcm...@googlegroups.com
Hello, 我做了一個Ansi編輯器,蠻類似PCMan的功能和外觀


功能:
讀取/儲存.ans檔案
設定文字前景背景色
設定文字閃爍
複製/貼上ansi文字

這個editor是基於CTermData與CTelnetCon製作的,
存放文字與顏色資訊的作法是沿用原本的設計存在m_Screen與CharAttr中。

當開啟ansi editor時,一樣是會new一個CTelnetCon出來,
只是差在使用者的input會由editor來處理,而非發raw string給伺服器

然後我要說一下抱歉,在看patch的時候才注意到我無意間修改了原本code的排版(像是多一個空格之類的)
所以讓patch多了蠻多和ansi editor實作無關的地方。

我現在知道這些排版的修改要獨自做一個commit,真是抱歉給你們造成困擾。

修改檔案列表
src/core/termdata.cpp
src/core/termdata.h
src/core/termsel.cpp
src/core/termview.cpp
src/core/termview.h
src/mainframe.cpp
src/mainframe.h
src/view/telnetcon.cpp
src/view/telnetcon.h
src/view/telnetview.cpp
src/view/telnetview.h

缺少的功能:
下載整個文章到editor中檢視
ansi_editor.patch

Roy Lu

unread,
Apr 4, 2014, 12:24:03 PM4/4/14
to pcm...@googlegroups.com
我自己測試讀取windows版PCMan所產生出來的.ans檔案是ok的

Jim Huang

unread,
Apr 5, 2014, 12:59:47 AM4/5/14
to pcm...@googlegroups.com
Roy Lu <roymer...@gmail.com> 於 2014年4月5日 上午12:18 寫道:
Hello, 我做了一個Ansi編輯器,蠻類似PCMan的功能和外觀

hi Roy,

感謝貢獻!

功能:
讀取/儲存.ans檔案
設定文字前景背景色
設定文字閃爍
複製/貼上ansi文字
這個editor是基於CTermData與CTelnetCon製作的,
存放文字與顏色資訊的作法是沿用原本的設計存在m_Screen與CharAttr中。

可以將修改儘量獨立於 CTermData 與 CTelnetCon 嗎?這兩個 class 已經很難維護了。
另外,請試著拆開修改為獨立的 patch 集。

該 patch 存在非必要的修改,類似以下:

@@ -1358,7 +1379,7 @@ void CTermData::SetTextAttr( CTermCharAttr attr, int flags, GdkPoint start, GdkP
     if( block || start.y == end.y )
     {
         if( end.x < start.x )
-            swap(end.y, end.x);
+            swap(end.y, end.x);
 
         for( int iline = start.y; iline <= end.y; iline++ )
         {

這沒有實際上的更動,請避免。
 
當開啟ansi editor時,一樣是會new一個CTelnetCon出來,
只是差在使用者的input會由editor來處理,而非發raw string給伺服器

若關閉 telnet connection 時,ANSI editor 仍開啟,處置方式為何?
Thanks,
-jserv

henry...@gmail.com

unread,
Apr 7, 2014, 9:55:41 AM4/7/14
to pcm...@googlegroups.com
Roy你好:

我們這邊有三位朋友, 由於修課的關係, 本學期目標之一是在pcmanx上新增ansi編輯器功能.
開始survey後不久發現已經被你做出來了! 真是厲害! =D

我測試了一下, 看到兩個issue:
1. 選擇前景or背景顏色的地方是亂碼呢, 我是用Xming去連遠端的server, server OS是Linux dreammon 3.11.10
請問可能是xming的問題嗎?

2. 在windows的pcman上, 可以用shift+滑鼠左鍵拖移的功能, 框住長方形的範圍, 而不局限於行列的模式. 這時候若選擇背景, 則選取的區塊會變色. 你的patch上面也可以用shift+滑鼠左鍵拖移出長方形的範圍, 但若選取背景, 則會以行列的形式變換背景顏色, 而不是只有選取區塊.

請問你之後打算實作哪些功能呢? 是否有一些(譬如說上述的)功能能讓我們為你實作?

感謝回覆!

Best Regards,
shock

Roy Lu

unread,
Apr 7, 2014, 10:27:45 AM4/7/14
to pcm...@googlegroups.com
Hi, 我把editor的實作移到一個新的class CEditor中了,所以從目前的commit重新製作了一個patch,
也只包含了必要的修改,原本那個雜七雜八的patch就請忽略他吧。

CEditor這個class是繼承自CTelnetCon class,如果是開啟editor,
在CMainFrame::NewCon()裡面CTelnetCon* pCon;就會以new CEditor()來實作
所以關閉Connection時,CEditor也是會呼叫解構式。

另外我發現2個bug,
1.讀取.ans檔案時,滑鼠游標會消失,如果只是單純開啟AnsiEditor就不會
2.某些情況下設定文字閃爍會沒有作用

目前還在找問題出在哪中


ansieditor0407.patch

Jim Huang

unread,
Apr 7, 2014, 3:11:50 PM4/7/14
to pcm...@googlegroups.com
在 2014年4月7日 下午10:27,Roy Lu <roymer...@gmail.com> 寫道:
> Hi, 我把editor的實作移到一個新的class CEditor中了,所以從目前的commit重新製作了一個patch,
> 也只包含了必要的修改,原本那個雜七雜八的patch就請忽略他吧。

hi Roy,

Good Job!
在沒有任何連線的狀態下,在 pcmanx 畫面按下 "blink" checkbox,會導致 SegFault,以下是 gdb 顯示的 backtrace:

Program received signal SIGSEGV, Segmentation fault.
CMainFrame::SetBlink (togglebutton=0x8cf4b0, _this=0x7ba780) at
mainframe.cpp:1943
1943 if( _this->GetCurCon()->m_isAnsiEditor == false){

另外,請考慮以下程式碼修改:

(1) coding style 的不一致,還有 ansi editor 的說明不夠簡單扼要

+/**
+ * @brief ????ansi editor?????
+ */
+void CTermView::UpdateEditor(){
+ //m_Caret.Hide(); //trying to fix caret problem.
+

(2) UpdateEditor() 是否有不需要每次都全部清除畫面的解決方案?

+ m_pTermData->m_CaretPos.x = 0;
+ m_pTermData->m_CaretPos.y = 0;
+
+ //clear screen.
+ m_pTermData->ClearScreen(2);
+ m_pTermData->EditorActions("LoadEditorText");
+
+ //reset caret position
+ m_pTermData->m_CaretPos.x = x;
+ m_pTermData->m_CaretPos.y = y;

(3) 不妨先合併一部分 editor 程式碼,有問題的 blink 拆成另一個 patch,日後解決再整合?

+ // Ansi Editor widget: blink check box. Now it's disabled temporary.
+ m_chkBlink = gtk_check_button_new_with_label("blink");
+ // disable blink button because blink attr still has some problems
+ //gtk_widget_set_sensitive(m_chkBlink, false);


(4) 請將自己的名字標注於程式碼

--- /dev/null
+++ b/src/view/editor.cpp
@@ -0,0 +1,821 @@
+/**
+ * Copyright (c) 2005 PCMan <pcma...@gmail.com>


(5) 可否考慮更明確的命名?Send() 令人混淆

+/**
+ * @brief Deal with user input. Store the text in TermData.
+ */
+int CEditor::Send( void* buf, int length )
+{


(6) 可否改用 enum + switch 改寫嗎?

+void CEditor::EditorActions(string ins, string arg)
+{
+ if(ins == "InitAnsiEditor"){
+ InitAnsiEditor();
+ }
+
+ if(ins == "MoveUp"){
+ MoveUp();
+ }
+
+ if(ins == "MoveDown"){
+ MoveDown();
+ }

(7) 有需要揭露這麼多 public function 嗎?

+class CEditor: public CTelnetCon
+{
+public:
+ CEditor(CTermView* pView, CSite& SiteInfo);
+ ~CEditor();
...
+ void MoveUp();
+ void MoveDown();
+ void MoveLeft();

Thanks,
-jserv

ChihChiang Chuang

unread,
May 13, 2014, 10:47:09 PM5/13/14
to pcm...@googlegroups.com
Hi all,

首先感謝Roy Lu貢獻的第一版Ansi Editor patch
我們嘗試對此Ansi Editor做了一點修改
主要修改了顏色的表示方式
目前在選擇顏色時是直接以該顏色顯示, 讓使用者更直覺知道選取的顏色是什麼
其餘修改部分如下, 另外也有一些問題要請教jserv老師

jserv於 2014年4月8日星期二UTC+8上午3時11分50秒寫道:
在 2014年4月7日 下午10:27,Roy Lu <roymer...@gmail.com> 寫道:
> Hi, 我把editor的實作移到一個新的class CEditor中了,所以從目前的commit重新製作了一個patch,
> 也只包含了必要的修改,原本那個雜七雜八的patch就請忽略他吧。

hi Roy,

Good Job!
在沒有任何連線的狀態下,在 pcmanx 畫面按下 "blink" checkbox,會導致 SegFault,以下是 gdb 顯示的 backtrace:

Program received signal SIGSEGV, Segmentation fault.
CMainFrame::SetBlink (togglebutton=0x8cf4b0, _this=0x7ba780) at
mainframe.cpp:1943
1943        if( _this->GetCurCon()->m_isAnsiEditor == false){

修正Segment fault問題.
 
另外,請考慮以下程式碼修改:

(1) coding style 的不一致,還有 ansi editor 的說明不夠簡單扼要

+/**
+ * @brief ????ansi editor?????
+ */
+void CTermView::UpdateEditor(){
+    //m_Caret.Hide();        //trying to fix caret problem.
- codeing style會繼續修正
- 註解中仍然有???, 會試著修正
- 請問ansi editor的說明指的是git log中的說明嗎?
 
(2) UpdateEditor() 是否有不需要每次都全部清除畫面的解決方案?

+    m_pTermData->m_CaretPos.x = 0;
+    m_pTermData->m_CaretPos.y = 0;
+
+    //clear screen.
+    m_pTermData->ClearScreen(2);
+    m_pTermData->EditorActions("LoadEditorText");
+
+    //reset caret position
+    m_pTermData->m_CaretPos.x = x;
+    m_pTermData->m_CaretPos.y = y;

(3) 不妨先合併一部分 editor 程式碼,有問題的 blink 拆成另一個 patch,日後解決再整合?

+    // Ansi Editor widget: blink check box. Now it's disabled temporary.
+    m_chkBlink = gtk_check_button_new_with_label("blink");
+    // disable blink button because blink attr still has some problems
+    //gtk_widget_set_sensitive(m_chkBlink, false);


(4) 請將自己的名字標注於程式碼

--- /dev/null
+++ b/src/view/editor.cpp
@@ -0,0 +1,821 @@
+/**
+ * Copyright (c) 2005 PCMan <pcma...@gmail.com>


將editor.cpp & editor.h 作者改成Roy Lu
 
(5) 可否考慮更明確的命名?Send() 令人混淆

+/**
+ * @brief Deal with user input. Store the text in TermData.
+ */
+int CEditor::Send( void* buf, int length )
+{


(6) 可否改用 enum + switch 改寫嗎?

+void CEditor::EditorActions(string ins, string arg)
+{
+    if(ins == "InitAnsiEditor"){
+        InitAnsiEditor();
+    }
+
+    if(ins == "MoveUp"){
+        MoveUp();
+    }
+
+    if(ins == "MoveDown"){
+        MoveDown();
+    }

- 我們有試著要改寫, 但遇到問題
  原本的寫法是因應在telnetview中能透過GetCon()取得termdata
  所以CEditor::EditorActions的宣告也寫在termdate.h中
  若傳進來的第一個參數改用enum表示
  這樣enum也會需要在termdata中宣告
  但我們認為editor actions宣告在termdata中可能不適合
  想請問是否有更好的做法呢?
 
(7) 有需要揭露這麼多 public function 嗎?

+class CEditor: public CTelnetCon
+{
+public:
+    CEditor(CTermView* pView, CSite& SiteInfo);
+    ~CEditor();
...
+    void MoveUp();
+    void MoveDown();
+    void MoveLeft();

Thanks,
-jserv

Thanks,
var
AnsiEditor0514.patch

ChihChiang Chuang

unread,
May 15, 2014, 10:55:54 AM5/15/14
to pcm...@googlegroups.com
Hi all,

我們又修正了一些問題, 附檔是新的patch
1. 修正在Ansi Editor複製貼上時, 第一行位置跑掉的問題
2. 修正在Ansi Editor複製貼上時, 滑鼠游標會跑掉, 不在文字最後面的問題
3. 增加Ansi Editor Clear Screen功能選項, 完全清除畫面.

而針對上一篇jserv老師給的建議也有做了修正如下:

ChihChiang Chuang於 2014年5月14日星期三UTC+8上午10時47分09秒寫道:
若不每次都完全清除畫面, 當使用者透過滑鼠圈選而反白畫面時, 反白無法消除
我們認為該保留此清除畫面的作法;
不過windows版本卻保持反白不消除, 推測windows版本是用別的方法處理. 
 
(3) 不妨先合併一部分 editor 程式碼,有問題的 blink 拆成另一個 patch,日後解決再整合?

+    // Ansi Editor widget: blink check box. Now it's disabled temporary.
+    m_chkBlink = gtk_check_button_new_with_label("blink");
+    // disable blink button because blink attr still has some problems
+    //gtk_widget_set_sensitive(m_chkBlink, false);


雖然原作者Roy說有情況會無法使用blink
但我們測不出來.
 
(4) 請將自己的名字標注於程式碼

--- /dev/null
+++ b/src/view/editor.cpp
@@ -0,0 +1,821 @@
+/**
+ * Copyright (c) 2005 PCMan <pcma...@gmail.com>


將editor.cpp & editor.h 作者改成Roy Lu
 
(5) 可否考慮更明確的命名?Send() 令人混淆

+/**
+ * @brief Deal with user input. Store the text in TermData.
+ */
+int CEditor::Send( void* buf, int length )
+{


此function是CEditor繼承至CTeleCon而override的, 所以命名無法更動
或是要連原始的名稱都更動.
已將不必要的function改為private
 
Thanks,
-jserv

Thanks,
var

目前已知的issue有:
1. 讀取ans檔後, 滑鼠游標會不見.
2. 沒有insert功能.

謝謝.
var 
AnsiEditor0515.patch

Jim Huang

unread,
May 15, 2014, 11:55:32 AM5/15/14
to pcm...@googlegroups.com
在 2014年5月15日 下午10:55,ChihChiang Chuang <chuangch...@gmail.com> 寫道:
> @@ -1068,7 +1068,7 @@ string GetChangedAttrStr(CTermCharAttr oldattr, CTermCharAttr newattr)
> return text;
> }
>
> -static void read_line_with_color( int row, int col1, int col2, void* data )
> +void CTermData::read_line_with_color( int row, int col1, int col2, void* data )

為何取消原本的 static 呢?read_line_with_color 不應該是 method,更不應該 export

> +++ b/src/core/termdata.h
> @@ -292,7 +292,11 @@ public:
> void AllocScreenBuf( int RowCount, unsigned short RowsPerPage, unsigned short ColsPerPage );
> virtual void OnLineModified( int row );
>
> + static void read_line_with_color( int row, int col1, int col2, void* data );
>
> + // AnsiEditor methods. This methods will be overridden by CEditor.
> + virtual void EditorActions(string ins, string arg = ""){ }
> + virtual void ApplyAnsiColor(int bright, int blink, int fg, int bg){ }

這兩個 method 破壞了 TermData 的資料封裝和模組化。可否提出改善機制?
比較理想的方式是透過 set/get 來存取內部狀態。

> @@ -759,6 +759,17 @@ void CTermView::OnLButtonDown(GdkEventButton* evt)
>
> m_pTermData->m_Sel->NewStart( y, x, left,
> (evt->state & (GDK_SHIFT_MASK|GDK_MOD1_MASK|GDK_CONTROL_MASK)) );
> +
> + if(m_pTermData->m_isAnsiEditor){
> + //set caret to current position
> + m_pTermData->m_CaretPos.x = x;
> + m_pTermData->m_CaretPos.y = y;

為何不採用註冊 callback 的方式來實做呼叫 ANSI editor 呢?

> +void CTermView::UpdateEditor(){
> + //m_Caret.Hide(); //trying to fix caret problem.
> +

這段是否必要?

> + //reset caret position
> + m_pTermData->m_CaretPos.x = x;
> + m_pTermData->m_CaretPos.y = y;
> + UpdateCaretPos();
> + //m_Caret.Show();
> +}

同樣,是否必要?

> + // Ansi Editor widget: blink check box. Now it's disabled temporary.
> + m_chkBlink = gtk_check_button_new_with_label("blink");

修正英文文法和錯字。

> + gtk_list_store_append(store, &iter);
> + gtk_list_store_set(store, &iter, 0, "Front", 1, "#000000", -1);
> + gtk_list_store_append(store, &iter);
> + gtk_list_store_set(store, &iter, 0, COLOR_BLOCK, 1, "#000000", -1);
> + gtk_list_store_append(store, &iter);
> + gtk_list_store_set(store, &iter, 0, COLOR_BLOCK, 1, "#AA0000", -1);
> + gtk_list_store_append(store, &iter);
> + gtk_list_store_set(store, &iter, 0, COLOR_BLOCK, 1, "#00AA00", -1);
> + gtk_list_store_append(store, &iter);

能寫出比較容易維護的程式碼嗎?

Thanks,
-jserv

henry...@gmail.com

unread,
May 20, 2014, 10:35:58 AM5/20/14
to pcm...@googlegroups.com
Hi jserv:

想請教一下這樣的設計是否妥當:

On Thursday, May 15, 2014 11:55:32 PM UTC+8, jserv wrote:
在 2014年5月15日 下午10:55,ChihChiang Chuang <chuangch...@gmail.com> 寫道:

> +++ b/src/core/termdata.h
> @@ -292,7 +292,11 @@ public:
>      void AllocScreenBuf( int RowCount, unsigned short RowsPerPage, unsigned short ColsPerPage );
>      virtual void OnLineModified( int row );
>
> +    static void read_line_with_color( int row, int col1, int col2, void* data );
>
> +    // AnsiEditor methods. This methods will be overridden by CEditor.
> +    virtual void EditorActions(string ins, string arg = ""){ }
> +    virtual void ApplyAnsiColor(int bright, int blink, int fg, int bg){ }

這兩個 method 破壞了 TermData 的資料封裝和模組化。可否提出改善機制?
比較理想的方式是透過 set/get 來存取內部狀態。

目前的做法是: CEditor 繼承 CTelnetCon, CTelnetCon又繼承至CTermData.
然而, 相對於CTelnetCon有實作自己的view (CTelnetView) 去繼承CTermView, CEditor並未實作自己的View, 而是附加操作於CTelnetView, 於是便破壞了模組結構.

在不破壞CTermData結構的情況下, 又需要能夠直接從CTermData的結構出發而能夠存取到CEditor的相關資料, 我想這是上述兩個virtual method存在的原因.
我目前想到的解法是拿掉這兩個virtual method, 但相對的CTermData裡面新增SetAnsiEditor / GetAnsiEditor這兩個method, 然後用指標是否為null的方式來判斷他是否為AnsiEditor, 這樣的話就可以把這兩個virtual method都拿掉. 

這樣的構想請問符合保存CTermData資料封裝和維持原先模組化的目標嗎?

 
> @@ -759,6 +759,17 @@ void CTermView::OnLButtonDown(GdkEventButton* evt)
>
>          m_pTermData->m_Sel->NewStart( y, x, left,
>                  (evt->state & (GDK_SHIFT_MASK|GDK_MOD1_MASK|GDK_CONTROL_MASK)) );
> +
> +        if(m_pTermData->m_isAnsiEditor){
> +            //set caret to current position
> +            m_pTermData->m_CaretPos.x = x;
> +            m_pTermData->m_CaretPos.y = y;

為何不採用註冊 callback 的方式來實做呼叫 ANSI editor 呢?


承上面的敘述, 如果新增一個CEditorView繼承至CTelnetView, 便可利用註冊callback的方式來呼叫AnsiEditor. 
只是在原本的CMainFrame裡面有的GetCurView / GetCurCon methods是針對CTelnetCon設計的, 因此需要新增GetCurEditorView / GetCurEditor methods, 來存取相對應的功能. 原本的GetCurView / GetCurCon methods依舊可以正常執行 (分別指到同一個view和data, 只是對其操作的型別不同).

這樣的設計妥當嗎?

Thanks,
shock

Thanks,
-jserv

henry...@gmail.com

unread,
May 21, 2014, 5:21:06 AM5/21/14
to pcm...@googlegroups.com, henry...@gmail.com


On Tuesday, May 20, 2014 10:35:58 PM UTC+8, henry...@gmail.com wrote:
Hi jserv:

想請教一下這樣的設計是否妥當:

On Thursday, May 15, 2014 11:55:32 PM UTC+8, jserv wrote:
在 2014年5月15日 下午10:55,ChihChiang Chuang <chuangch...@gmail.com> 寫道:

> +++ b/src/core/termdata.h
> @@ -292,7 +292,11 @@ public:
>      void AllocScreenBuf( int RowCount, unsigned short RowsPerPage, unsigned short ColsPerPage );
>      virtual void OnLineModified( int row );
>
> +    static void read_line_with_color( int row, int col1, int col2, void* data );
>
> +    // AnsiEditor methods. This methods will be overridden by CEditor.
> +    virtual void EditorActions(string ins, string arg = ""){ }
> +    virtual void ApplyAnsiColor(int bright, int blink, int fg, int bg){ }

這兩個 method 破壞了 TermData 的資料封裝和模組化。可否提出改善機制?
比較理想的方式是透過 set/get 來存取內部狀態。

目前的做法是: CEditor 繼承 CTelnetCon, CTelnetCon又繼承至CTermData.
然而, 相對於CTelnetCon有實作自己的view (CTelnetView) 去繼承CTermView, CEditor並未實作自己的View, 而是附加操作於CTelnetView, 於是便破壞了模組結構.

在不破壞CTermData結構的情況下, 又需要能夠直接從CTermData的結構出發而能夠存取到CEditor的相關資料, 我想這是上述兩個virtual method存在的原因.
我目前想到的解法是拿掉這兩個virtual method, 但相對的CTermData裡面新增SetAnsiEditor / GetAnsiEditor這兩個method, 然後用指標是否為null的方式來判斷他是否為AnsiEditor, 這樣的話就可以把這兩個virtual method都拿掉. 

這樣的構想請問符合保存CTermData資料封裝和維持原先模組化的目標嗎?

更正一下, 我之前沒看清楚, 其實原本的版本內直接去存取CTermData的行為都可以用callback的方式處理掉, 因此只要新增CEditorView並且將相關的操作都集中到裡面處理, 並在CMainFrame新增GetCurEditor / GetCurEditorView 這兩個method即可, 這樣子便可讓CTermData、CTelnetCon、CTermView、CTelnetView皆維持原本的狀態.

Jim Huang

unread,
May 21, 2014, 5:25:46 AM5/21/14
to pcm...@googlegroups.com, Jay Wang
在 2014年5月21日 下午5:21, <henry...@gmail.com> 寫道:
> 更正一下, 我之前沒看清楚, 其實原本的版本內直接去存取CTermData的行為都可以用callback的方式處理掉,
> 因此只要新增CEditorView並且將相關的操作都集中到裡面處理, 並在CMainFrame新增GetCurEditor /
> GetCurEditorView 這兩個method即可,
> 這樣子便可讓CTermData、CTelnetCon、CTermView、CTelnetView皆維持原本的狀態.

Good.

另外可考慮 Asynchronous Dispatcher:
http://doanduyhai.wordpress.com/2012/08/04/design-pattern-the-asynchronous-dispatcher/

在這個案例比較單純,但仍可思考封裝背後的進階議題。

Thanks,
-jserv

ChihChiang Chuang

unread,
May 27, 2014, 9:37:40 AM5/27/14
to pcm...@googlegroups.com, Jay Wang
jserv於 2014年5月21日星期三UTC+8下午5時25分46秒寫道:
謝謝老師提供的參考資料.

這次修改的版本是新增EditorView處理操作相關的callback
維持TermData, TermView , TelnetView , TelnetCon原本的寫法
也依照之前的建議修正了寫法和錯誤
附件是這次新的patch
謝謝.

var
AnsiEditor0527.patch

Jim Huang

unread,
May 27, 2014, 9:44:43 AM5/27/14
to pcm...@googlegroups.com, Jay Wang
hi var,

Thanks for your contributions.

Can you explain why you would like to do the following changes?

- pCon = new CTelnetCon( m_pView, *site );
+ CEditor* pEditor;
+ if(url == "ansi_editor"){
+ m_eView = new CEditorView;
+ pEditor = new CEditor( m_eView, *site);
+ pCon = pEditor;
+ m_pView = m_eView;
+ }else{

Is it possible to avoid passing magic url string?

Sincerely,
-jserv

henry...@gmail.com

unread,
May 27, 2014, 10:31:02 PM5/27/14
to pcm...@googlegroups.com, Jay Wang
Hi jserv:
由於CEditor繼承至TelnetCon, 有許多設定是可以沿用的, 因此只在這裡透過傳入的string判斷new出來的實體為何, 讓之後的設定不用再寫一次.
我好奇的是這樣做有何不妥? 根據你的回應, 我做以下推測:

1. 不想讓使用者可以從"Open Ansi Editor" button以外的地方開啟Ansi Editor? (目前作法, 只要使用者在連線網址那邊輸入ansi_editor就能開啟一個新的Ansi Editor)
2. 不想透過string參數判別ansi editor? 如果寫成#define呢?

或者是有其他我沒提到的concern呢? 感謝回應!

BRs,
shock

Sincerely,
-jserv

Jim Huang

unread,
May 27, 2014, 10:34:09 PM5/27/14
to pcm...@googlegroups.com, Jay Wang
在 2014年5月28日 上午10:31, <henry...@gmail.com> 寫道:
> 由於CEditor繼承至TelnetCon, 有許多設定是可以沿用的, 因此只在這裡透過傳入的string判斷new出來的實體為何,
> 讓之後的設定不用再寫一次.
> 我好奇的是這樣做有何不妥? 根據你的回應, 我做以下推測:

hi shock,

我覺得這樣很好,但你應該在程式註解與 git commit message 提及這樣的設計,否則
日後維護時無從理解最初的設計。

Thanks,
-jserv

ChihChiang Chuang

unread,
May 28, 2014, 3:33:53 AM5/28/14
to pcm...@googlegroups.com, Jay Wang
jserv於 2014年5月28日星期三UTC+8上午10時34分09秒寫道:
Hi jserv,

感謝建議,
我們新增了程式註解以及git commit message,
附件是新的patch.

Regards,
var 
AnsiEditor0528.patch

Jim Huang

unread,
May 28, 2014, 3:42:20 AM5/28/14
to pcm...@googlegroups.com, Jay Wang
在 2014年5月28日 下午3:33,ChihChiang Chuang <chuangch...@gmail.com> 寫道:
> 感謝建議,
> 我們新增了程式註解以及git commit message,
> 附件是新的patch.

Thanks.
Merged in commit c086f0cafa2047e31654d3b8bc2b7da110beb014

-jserv
Reply all
Reply to author
Forward
0 new messages