[BACK]Return to asir32guiview.cpp CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / windows / asir32gui

Annotation of OpenXM_contrib2/windows/asir32gui/asir32guiview.cpp, Revision 1.33

1.1       noro        1: // asir32guiView.cpp : CAsir32guiView クラスの動作の定義を行います。
                      2: //
                      3:
                      4: #include "stdafx.h"
                      5:
                      6: #include "asir32gui.h"
                      7: #include "asir32guiDoc.h"
                      8: #include "asir32guiView.h"
                      9: #include "FatalDialog.h"
1.3       noro       10: #include <direct.h>
1.6       noro       11: #include <io.h>
1.1       noro       12:
                     13: #ifdef _DEBUG
                     14: #define new DEBUG_NEW
                     15: #undef THIS_FILE
                     16: static char THIS_FILE[] = __FILE__;
                     17: #endif
                     18:
1.5       noro       19: // const TextBufferSize     = 32768;
1.19      ohara      20: const int TextBufferSize     = 16384;
1.1       noro       21:
                     22: CAsir32guiView *theView;
                     23:
                     24: extern "C"
                     25: {
                     26: char *prev_hist(void), *next_hist(void), *search_hist(char *p);
                     27: void read_input_history(),write_input_history();
                     28: void init_input_history();
                     29: void add_hist(char *p), reset_traverse(void);
                     30: void asir_terminate(void);
                     31: void Main(int,char*[]);
                     32: void loadfile(char *);
                     33: void put_line(char *);
                     34: void send_intr(void);
                     35: void insert_to_theView(char *);
1.26      ohara      36: BOOL get_rootdir(char *,int,char *);
1.32      ohara      37: const char *get_locale_lang_iso639();
1.29      ohara      38: const char *get_helpdir();
1.1       noro       39: extern int bigfloat, prtime, prresult;
                     40: extern char *asir_libdir;
1.2       noro       41: extern int asirgui_kind;
1.1       noro       42:
                     43: void insert_to_theView(char *str)
                     44: {
                     45:        (void)theView->Insert(str);
                     46: }
                     47: void flush_log()
                     48: {
                     49:        if ( theView->Logging )
                     50:                theView->OnFileLog();
                     51: }
                     52: }
                     53:
                     54: /////////////////////////////////////////////////////////////////////////////
                     55: // CAsir32guiView
                     56:
                     57: IMPLEMENT_DYNCREATE(CAsir32guiView, CEditView)
                     58:
                     59: BEGIN_MESSAGE_MAP(CAsir32guiView, CEditView)
                     60:        //{{AFX_MSG_MAP(CAsir32guiView)
                     61:        ON_WM_KEYDOWN()
                     62:        ON_WM_CHAR()
                     63:        ON_WM_LBUTTONUP()
                     64:        ON_WM_RBUTTONDOWN()
                     65:        ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
                     66:        ON_COMMAND(ID_FILE_LOG, OnFileLog)
                     67:        ON_COMMAND(ID_ASIRHELP, OnAsirhelp)
1.33    ! ohara      68:        ON_COMMAND(ID_VISIT_SITE, OnVisitSite)
1.1       noro       69:        ON_UPDATE_COMMAND_UI(ID_FILE_LOG, OnUpdateFileLog)
                     70:        ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
1.3       noro       71:        ON_COMMAND(IDR_FONT, OnFont)
                     72:        ON_WM_CREATE()
1.6       noro       73:        ON_COMMAND(ID_CONTRIBHELP, OnContribhelp)
1.9       noro       74:        ON_WM_SIZE()
1.11      noro       75:        ON_COMMAND(ID_DSOLV, OnDsolv)
                     76:        ON_COMMAND(ID_GNUPLOT, OnGnuplot)
                     77:        ON_COMMAND(ID_OKDIFF, OnOkdiff)
                     78:        ON_COMMAND(ID_OKDMODULE, OnOkdmodule)
                     79:        ON_COMMAND(ID_OM, OnOm)
                     80:        ON_COMMAND(ID_PFPCOH, OnPfpcoh)
                     81:        ON_COMMAND(ID_PLUCKER, OnPlucker)
                     82:        ON_COMMAND(ID_SM1, OnSm1)
                     83:        ON_COMMAND(ID_TIGERS, OnTigers)
                     84:        ON_COMMAND(ID_TODOPARAMETRIZE, OnTodoparametrize)
1.24      noro       85:        ON_COMMAND(ID_NOROMATRIX, OnNoromatrix)
                     86:        ON_COMMAND(ID_NOROMWL, OnNoromwl)
                     87:        ON_COMMAND(ID_NNNDBF, OnNnndbf)
1.25      noro       88:        ON_COMMAND(ID_NOROPD, OnNoropd)
                     89:        ON_COMMAND(ID_NSTWLG, OnNstwistedlog)
1.1       noro       90:        //}}AFX_MSG_MAP
                     91:        // 標準印刷コマンド
                     92: //     ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint)
                     93: //     ON_COMMAND(ID_FILE_PRINT_DIRECT, CEditView::OnFilePrint)
                     94: //     ON_COMMAND(ID_FILE_PRINT_PREVIEW, CEditView::OnFilePrintPreview)
                     95: END_MESSAGE_MAP()
                     96:
                     97: /////////////////////////////////////////////////////////////////////////////
                     98: // CAsir32guiView クラスの構築/消滅
                     99:
                    100: CAsir32guiView::CAsir32guiView()
                    101: {
                    102:        // TODO: この場所に構築用のコードを追加してください。
                    103:        static int tmpView_created = 0;
                    104:
                    105:        init_input_history();
                    106:        read_input_history();
                    107:        DebugMode = 0;
                    108:        DebugInMain = 0;
1.9       noro      109: //     MaxLineLength = 80;
1.1       noro      110:        LogStart = 0;
                    111:        Logging = 0;
                    112:        Logfp = NULL;
                    113:        ResetIndex();
                    114:        theView = this;
1.23      ohara     115: #if _MSC_VER > 1300
                    116:        /* VS2003.NET or later */
                    117:        (AfxGetApp())->EnableHtmlHelp();
                    118: #endif
1.1       noro      119: }
                    120:
                    121: CAsir32guiView::~CAsir32guiView()
                    122: {
                    123:        write_input_history();
                    124: }
                    125:
                    126: BOOL CAsir32guiView::PreCreateWindow(CREATESTRUCT& cs)
                    127: {
                    128:        // TODO: この位置で CREATESTRUCT cs を修正して Window クラスまたはスタイルを
                    129:        //       修正してください。
                    130:
                    131:        m_dwDefaultStyle = dwStyleDefault & ~ES_AUTOHSCROLL ;
                    132:        m_dwDefaultStyle &= ~WS_HSCROLL;
                    133:        return CCtrlView::PreCreateWindow(cs);
                    134: }
                    135:
                    136: /////////////////////////////////////////////////////////////////////////////
                    137: // CAsir32guiView クラスの描画
                    138:
                    139: void CAsir32guiView::OnDraw(CDC* pDC)
                    140: {
                    141:        CAsir32guiDoc* pDoc = GetDocument();
                    142:        ASSERT_VALID(pDoc);
                    143:
                    144:        // TODO: この場所にネイティブ データ用の描画コードを追加します。
                    145: }
                    146:
                    147: /////////////////////////////////////////////////////////////////////////////
                    148: // CAsir32guiView クラスの印刷
                    149:
                    150: BOOL CAsir32guiView::OnPreparePrinting(CPrintInfo* pInfo)
                    151: {
                    152:        // デフォルトの印刷準備
                    153:        return DoPreparePrinting(pInfo);
                    154: }
                    155:
                    156: void CAsir32guiView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
                    157: {
                    158:        // TODO: 印刷前の特別な初期化処理を追加してください。
                    159: }
                    160:
                    161: void CAsir32guiView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
                    162: {
                    163:        // TODO: 印刷後の後処理を追加してください。
                    164: }
                    165:
                    166: /////////////////////////////////////////////////////////////////////////////
                    167: // CAsir32guiView クラスの診断
                    168:
                    169: #ifdef _DEBUG
                    170: void CAsir32guiView::AssertValid() const
                    171: {
                    172:        CEditView::AssertValid();
                    173: }
                    174:
                    175: void CAsir32guiView::Dump(CDumpContext& dc) const
                    176: {
                    177:        CEditView::Dump(dc);
                    178: }
                    179:
                    180: CAsir32guiDoc* CAsir32guiView::GetDocument() // 非デバッグ バージョンはインラインです。
                    181: {
                    182:        ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAsir32guiDoc)));
                    183:        return (CAsir32guiDoc*)m_pDocument;
                    184: }
                    185: #endif //_DEBUG
                    186:
                    187: /////////////////////////////////////////////////////////////////////////////
                    188: // CAsir32guiView クラスのメッセージ ハンドラ
                    189:
                    190: void CAsir32guiView::PutChar(int c)
                    191: {
1.8       noro      192:   int i,len;
1.1       noro      193:   char buf[2];
                    194:
1.8       noro      195:   if ( EndPos >= sizeof(Buffer)-1 ) {
                    196:       Beep(); return;
                    197:   }
1.1       noro      198:   for ( i = EndPos-1; i >= CurrentPos; i-- )
1.8       noro      199:       Buffer[i+1] = Buffer[i];
1.1       noro      200:   Buffer[CurrentPos] = (char)c;
1.8       noro      201: //  buf[0] = (char)c; buf[1] = 0;
                    202: //  Insert(buf,FALSE);
                    203:   len = GetWindowTextLength();
                    204:   if ( len+1 >= TextBufferSize )
                    205:       DeleteTop();
                    206:   CEditView::OnChar(c, 1, 0);
1.1       noro      207:   CurrentPos++;
                    208:   EndPos++;
                    209: }
                    210:
                    211: void CAsir32guiView::DeleteChar(int count) {
                    212:   int i,s,e;
                    213:   char null = 0;
                    214:
                    215:   if ( count > (EndPos-CurrentPos) )
                    216:     count = EndPos - CurrentPos;
1.15      noro      217:   if ( count > 0 ) {
1.1       noro      218:     EndPos -= count;
                    219:     for ( i = CurrentPos; i < EndPos; i++ )
                    220:       Buffer[i] = Buffer[i+count];
                    221:     GetEditCtrl().GetSel(s,e);
                    222:     GetEditCtrl().SetSel(s,s+count);
                    223:     GetEditCtrl().ReplaceSel(&null);
                    224:   }
                    225: }
                    226:
                    227: void CAsir32guiView::Insert(char *buf,BOOL wrap)
                    228: {
                    229:        char t[BUFSIZ*4];
                    230:        char *p,*q,c;
                    231:        int len;
                    232:        int i;
                    233:
                    234:        if ( wrap ) {
                    235:                i = GetEditCtrl().LineLength(-1);
                    236:                for ( p = t, q = buf; (c = *p++ = *q++) != 0; )
                    237:                        if ( c == '\r' ) {
                    238:                                *p++ = *q++; i = 0;
                    239:                        } else if ( (*q != '\r') && (++i == MaxLineLength) ) {
                    240:                                *p++ = '\r'; *p++ = '\r'; *p++ = '\n'; i = 0;
                    241:                        }
                    242:                p = t;
                    243:        } else
                    244:                p = buf;
                    245:        len = GetWindowTextLength();
                    246:        if ( strlen(p) + len >= TextBufferSize )
                    247:                DeleteTop();
                    248:        GetEditCtrl().ReplaceSel(p);
                    249: }
                    250:
                    251: void CAsir32guiView::DeleteTop()
                    252: {
                    253:   const char *p,*q;
                    254:   const char *buf;
                    255:   char null = 0;
1.20      ohara     256:   int len,len0;
1.1       noro      257:
                    258:   buf = LockBuffer();
                    259:   len0 = len = strlen(buf);
                    260:   for ( p = buf; len >= TextBufferSize/2; ) {
                    261:     q = strchr(p,'\n');
                    262:     if ( !q ) {
                    263:        len = 0; break;
                    264:     } else {
                    265:       q++; len -= (q-p); p = q;
                    266:     }
                    267:   }
                    268:   if ( Logging ) {
1.4       noro      269:     if ( len < LogStart )
                    270:        LogStart -= len;
                    271:     else {
                    272:        fwrite(buf+LogStart,1,len-LogStart,Logfp);
                    273:        LogStart = 0;
                    274:     }
1.1       noro      275:   }
                    276:   UnlockBuffer();
                    277:   if ( q ) {
                    278:        GetEditCtrl().SetSel(0,len);
                    279:        GetEditCtrl().ReplaceSel(&null);
                    280:   }
                    281:   UpdateCursor(EndPos);
                    282: }
                    283:
                    284: void CAsir32guiView::UpdateCursor(int pos)
                    285: {
                    286:   int s;
                    287:   int len;
                    288:
                    289:   if ( pos < 0 || pos > EndPos )
                    290:     Beep();
                    291:   else {
                    292:     len = GetWindowTextLength();
                    293:     CurrentPos = pos;
                    294:     s = len-EndPos+CurrentPos;
                    295:     GetEditCtrl().SetSel(s,s);
                    296:   }
                    297: }
                    298:
                    299: void CAsir32guiView::ReplaceString(char *str)
                    300: {
                    301:   UpdateCursor(0); DeleteChar(EndPos);
                    302:   Insert(str,FALSE);
                    303:   strcpy(Buffer,str);
                    304:   EndPos = CurrentPos = strlen(str);
                    305: }
                    306:
                    307: void CAsir32guiView::Beep(void) {
                    308:   ::MessageBeep(0xffffffff);
                    309: }
                    310:
                    311: void CAsir32guiView::Paste(void) {
1.8       noro      312:     char buf[2*BUFSIZ];
                    313:     const char *src;
                    314:     char c;
                    315:     int i,j,l;
                    316:     HGLOBAL hClip;
                    317:
                    318:     if ( asirgui_kind == ASIRGUI_MESSAGE ) {
                    319:         Beep(); return;
                    320:     }
1.2       noro      321:
1.8       noro      322:     if ( OpenClipboard() == FALSE ) {
                    323:         Beep(); return;
1.1       noro      324:     }
                    325:     hClip = GetClipboardData(CF_TEXT);
                    326:     src = (const char *)::GlobalLock(hClip);
1.10      noro      327:     if ( !src || (l=strlen(src)) >= sizeof(Buffer)-EndPos ) {
1.1       noro      328:        ::CloseClipboard();
                    329:        Beep(); return;
                    330:     }
1.8       noro      331:     for ( i = j = 0; i < l; i++ )
                    332:         if ( (c = src[i]) != '\n' && c != '\r' )
                    333:              buf[j++] = c;
                    334:     buf[j] = 0;
1.1       noro      335:     ::GlobalUnlock(hClip);
                    336:     ::CloseClipboard();
                    337:     GetEditCtrl().ReplaceSel(buf);
1.10      noro      338:     l = strlen(buf);
                    339:     for ( i = EndPos-1; i >= CurrentPos; i-- )
                    340:        Buffer[i+l] = Buffer[i];
                    341:     for ( j = 0, i = CurrentPos; j < l; j++, i++ )
                    342:        Buffer[i] = buf[j];
                    343:     EndPos += l; CurrentPos += l;
1.1       noro      344: }
                    345:
                    346: #define CTRL(c) (c)&0x1f
                    347:
                    348: void CAsir32guiView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
                    349: {
                    350:        // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
                    351:        char *exp_result;
                    352:
                    353:        switch ( nChar ) {
                    354:                case VK_LEFT:
                    355:                        UpdateCursor(CurrentPos-1); return;
                    356:                case VK_RIGHT:
                    357:                        UpdateCursor(CurrentPos+1); return;
                    358:                case VK_DELETE:
                    359:                        DeleteChar(1); return;
                    360:                case VK_UP:
                    361:                        if ( (exp_result = prev_hist()) != 0 )
                    362:                                ReplaceString(exp_result);
                    363:                        else
                    364:                                Beep();
                    365:                        return;
                    366:                case VK_DOWN:
                    367:                        if ( (exp_result = next_hist()) != 0 )
                    368:                                ReplaceString(exp_result);
                    369:                        else
                    370:                                Beep();
                    371:                        return;
                    372:                default:
                    373:                        break;
                    374:        }
                    375:        CEditView::OnKeyDown(nChar, nRepCnt, nFlags);
                    376: }
                    377:
                    378: void CAsir32guiView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
                    379: {
                    380:        // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
                    381:        char *exp_result;
1.13      noro      382:        char tmp[BUFSIZ];
1.27      noro      383:        int i;
1.1       noro      384:
1.2       noro      385:        if ( asirgui_kind == ASIRGUI_MESSAGE ) {
                    386:                Beep(); return;
                    387:        }
                    388:
1.1       noro      389:        switch ( nChar ) {
                    390:        case CTRL('M'): case CTRL('J'):
                    391:                UpdateCursor(EndPos);
                    392:                Buffer[EndPos] = 0;
                    393:                reset_traverse();
                    394:                if ( Buffer[0] == '!' ) {
                    395:                exp_result = search_hist(Buffer+1);
                    396:                if ( exp_result )
                    397:                        ReplaceString(exp_result);
                    398:                else {
                    399:                        UpdateCursor(0); DeleteChar(EndPos); Beep();
                    400:                }
                    401:                return;
                    402:                } else {
                    403:                        add_hist(Buffer);
                    404:                        put_line(Buffer);
                    405:                        ResetIndex();
                    406:                        nChar = CTRL('M');
                    407:                }
                    408:                break;
                    409:        case CTRL('N'):
                    410:                if ( (exp_result = next_hist()) != 0 )
                    411:                ReplaceString(exp_result);
                    412:                else
                    413:                Beep();
                    414:                return;
                    415:        case CTRL('P'):
                    416:                if ( (exp_result = prev_hist()) != 0 )
                    417:                ReplaceString(exp_result);
                    418:                else
                    419:                Beep();
                    420:                return;
                    421:        case CTRL('A'):
                    422:                UpdateCursor(0); return;
                    423:        case CTRL('E'):
                    424:                UpdateCursor(EndPos); return;
                    425:        case CTRL('F'):
                    426:                UpdateCursor(CurrentPos+1); return;
                    427:        case CTRL('B'):
                    428:                UpdateCursor(CurrentPos-1); return;
                    429:        case CTRL('K'):
                    430:                DeleteChar(EndPos-CurrentPos); return;
                    431:        case CTRL('U'):
                    432:                UpdateCursor(0); DeleteChar(EndPos); return;
                    433:        case CTRL('D'):
                    434:                DeleteChar(1); return;
                    435:        case CTRL('H'):
                    436:                if ( CurrentPos > 0 ) {
                    437:                UpdateCursor(CurrentPos-1); DeleteChar(1);
                    438:                } else
                    439:                Beep();
                    440:                return;
                    441:        case CTRL('C'):
                    442:                send_intr();
                    443:                /* wake up the engine */
1.13      noro      444:                tmp[0] = 0;
                    445:                put_line(tmp);
1.1       noro      446:                return;
1.27      noro      447:        case CTRL('Y'):
                    448:                Paste(); return;
                    449:        case CTRL('I'):
                    450:                return;
1.1       noro      451:        default :
                    452:                if ( nChar >= 0x20 && nChar < 0x7f )
                    453:                        PutChar(nChar);
                    454:                else
                    455:                        Beep();
                    456:                return;
                    457:        }
                    458:        CEditView::OnChar(nChar, nRepCnt, nFlags);
                    459: }
                    460:
                    461: void CAsir32guiView::OnLButtonUp(UINT nFlags, CPoint point)
                    462: {
                    463:        // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
                    464:     GetEditCtrl().Copy(); UpdateCursor(EndPos);
                    465:        CEditView::OnLButtonUp(nFlags, point);
                    466: }
                    467:
                    468: void CAsir32guiView::OnRButtonDown(UINT nFlags, CPoint point)
                    469: {
                    470:        // TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
                    471:     Paste();
                    472:
                    473: //     CEditView::OnRButtonDown(nFlags, point);
                    474: }
                    475:
                    476: void CAsir32guiView::OnFileOpen()
                    477: {
                    478:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    479:        char cmd[BUFSIZ*2]; // XXX
                    480:        char *p;
1.3       noro      481:        static char errmsg[BUFSIZ];
                    482:        static char prevdir[BUFSIZ];
1.1       noro      483:
1.3       noro      484:        if ( !prevdir[0] ) {
                    485:                get_rootdir(prevdir,sizeof(prevdir),errmsg);
                    486:                strcat(prevdir,"\\lib");
                    487:        }
                    488:
                    489:        _chdir(prevdir);
1.1       noro      490:        CFileDialog     fileDialog(TRUE);
1.14      noro      491:        fileDialog.m_ofn.lpstrInitialDir = prevdir;
1.1       noro      492:        if ( fileDialog.DoModal() == IDOK ) {
                    493:                CString pathName = fileDialog.GetPathName();
                    494:                sprintf(cmd,"load(\"%s\");",pathName);
                    495:                for ( p = cmd; *p; p++ )
                    496:                        if ( *p == '\\' )
                    497:                                *p = '/';
                    498:                put_line(cmd);
1.20      ohara     499:                strcpy(cmd,pathName);
                    500:                p = strrchr(cmd,'\\');
1.3       noro      501:                if ( p ) {
                    502:                        *p = 0;
1.20      ohara     503:                        strcpy(prevdir,cmd);
1.3       noro      504:                }
1.1       noro      505:        }
                    506: }
1.29      ohara     507:
1.21      ohara     508: void CAsir32guiView::viewHtmlHelp(char *help)
                    509: {
1.23      ohara     510:        char *helpfile;
1.29      ohara     511:        char fmt[] = "%s\\%shelp.chm";
                    512:        const char *dir = get_helpdir();
                    513:        helpfile = (char *)malloc(sizeof(fmt) + strlen(dir) + strlen(help));
                    514:        sprintf(helpfile,fmt,dir,help);
1.21      ohara     515: #if _MSC_VER < 1300
                    516:     /* Visual C++ 6.0 */
                    517:        ::HtmlHelp(NULL, helpfile, HH_DISPLAY_TOPIC, 0);
1.23      ohara     518: #else
                    519:        CWinApp *top = AfxGetApp();
                    520:        top->SetHelpMode(AFX_HELP_TYPE::afxHTMLHelp);
                    521:        if (top->m_pszHelpFilePath) {
                    522:                free((void*)top->m_pszHelpFilePath);
                    523:        }
                    524:        top->m_pszHelpFilePath = helpfile;
                    525:        HtmlHelp(HH_DISPLAY_TOPIC, 0);
1.21      ohara     526: #endif
                    527: }
1.1       noro      528:
1.33    ! ohara     529: void CAsir32guiView::viewWeb(char *url)
        !           530: {
        !           531:        ShellExecute(NULL,"open",url,NULL,NULL,SW_SHOWNORMAL);
        !           532: }
        !           533:
1.32      ohara     534: void CAsir32guiView::viewWebHelp(char *key)
                    535: {
                    536:        char *base="http://www.math.kobe-u.ac.jp/OpenXM/Current/doc/";
                    537:        char *url = (char *)malloc(strlen(base)+strlen(key)+1);
                    538:        sprintf(url,"%s%s",base,key);
1.33    ! ohara     539:        viewWeb(url);
1.32      ohara     540:        free(url);
                    541: }
                    542:
1.1       noro      543: void CAsir32guiView::OnAsirhelp()
                    544: {
1.32      ohara     545:        const char *lang = get_locale_lang_iso639();
                    546:        if(strcmp(lang,"ja")==0) {
1.33    ! ohara     547:                viewWebHelp("index-doc-asir-ja.html");
1.32      ohara     548:        }else {
1.33    ! ohara     549:                viewWebHelp("index-doc-asir.html");
        !           550:        }
        !           551: }
        !           552:
        !           553: void CAsir32guiView::OnVisitSite()
        !           554: {
        !           555:        const char *lang = get_locale_lang_iso639();
        !           556:        if(strcmp(lang,"ja")==0) {
        !           557:                viewWeb("http://www.math.kobe-u.ac.jp/Asir/asir-ja.html");
        !           558:        }else {
        !           559:                viewWeb("http://www.math.kobe-u.ac.jp/Asir/");
1.32      ohara     560:        }
1.1       noro      561: }
                    562:
                    563: void CAsir32guiView::OnFileLog()
                    564: {
                    565:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    566:        if ( !Logging ) {
                    567:                CFileDialog     fileDialog(TRUE);
                    568:                if ( fileDialog.DoModal() == IDOK ) {
                    569:                        CString logfile = fileDialog.GetPathName();
                    570:                        Logfp = fopen(logfile,"ab");
                    571:                        if ( Logfp ) {
                    572:                                LogStart = GetWindowTextLength();
                    573:                                Logging = 1;
                    574:                        }
                    575:                }
                    576:        } else {
                    577:                const char *buf;
                    578:                buf = LockBuffer();
                    579:                fwrite(buf+LogStart,1,strlen(buf)-LogStart,Logfp);
                    580:                UnlockBuffer();
                    581:                fclose(Logfp);
                    582:                Logging = 0;
                    583:        }
                    584: }
                    585:
                    586: void CAsir32guiView::OnUpdateFileLog(CCmdUI* pCmdUI)
                    587: {
                    588:        // TODO: この位置に command update UI ハンドラ用のコードを追加してください
                    589:        if ( Logging )
                    590:                pCmdUI->SetCheck(1);
                    591:        else
                    592:                pCmdUI->SetCheck(0);
                    593: }
                    594:
                    595: void CAsir32guiView::OnEditPaste()
                    596: {
                    597:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    598:     Paste();
1.3       noro      599: }
                    600:
1.9       noro      601: void CAsir32guiView::UpdateMetrics()
                    602: {
                    603:    TEXTMETRIC tm;
                    604:    RECT r;
                    605:
                    606:    GetEditCtrl().GetRect(&r);
                    607:    CDC *pDC = GetDC();
                    608:    pDC->SelectObject(GetFont());
                    609:    pDC->GetTextMetrics(&tm);
                    610:    MaxLineLength = (r.right-r.left)/tm.tmAveCharWidth-1;
                    611: }
                    612:
1.3       noro      613: void CAsir32guiView::OnFont()
                    614: {
                    615:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.26      ohara     616:        INT_PTR ret;
1.9       noro      617:        LOGFONT lf;
                    618:
                    619:        GetFont()->GetLogFont(&lf);
                    620:        CFontDialog fd(&lf,CF_EFFECTS | CF_SCREENFONTS | CF_FIXEDPITCHONLY);
1.3       noro      621:        static CFont *f = 0;
                    622:
                    623:        ret = fd.DoModal();
                    624:        if ( ret == IDOK ) {
                    625:                fd.GetCurrentFont(&lf);
                    626:                if ( f )
                    627:                        delete f;
                    628:                f = new CFont;
                    629:                f->CreateFontIndirect(&lf);
                    630:                SetFont(f);
1.9       noro      631:                UpdateMetrics();
1.3       noro      632:        }
                    633: }
                    634:
                    635: int CAsir32guiView::OnCreate(LPCREATESTRUCT lpCreateStruct)
                    636: {
                    637:        if (CEditView::OnCreate(lpCreateStruct) == -1)
                    638:                return -1;
                    639:
                    640:        // TODO: この位置に固有の作成用コードを追加してください
1.9       noro      641:
1.3       noro      642:        LOGFONT logFont; memset(&logFont, 0, sizeof(LOGFONT));
                    643:        logFont.lfHeight = 20;
                    644:        logFont.lfCharSet = DEFAULT_CHARSET;
                    645:        strcpy(logFont.lfFaceName, "Terminal");
                    646:        CFont *f = new CFont;
                    647:        f->CreateFontIndirect(&logFont);
                    648:        SetFont(f);
1.9       noro      649:        UpdateMetrics();
1.3       noro      650:        GetEditCtrl().LimitText(nMaxSize);
1.9       noro      651:        GetEditCtrl().SetTabStops(m_nTabStops);
1.3       noro      652:
                    653:        return 0;
1.6       noro      654: }
                    655:
                    656: void CAsir32guiView::OnContribhelp()
                    657: {
                    658:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     659:        viewHtmlHelp("cman");
1.6       noro      660: }
                    661:
1.11      noro      662: void CAsir32guiView::OnSize(UINT nType, int cx, int cy)
                    663: {
                    664:        CEditView::OnSize(nType, cx, cy);
                    665:
                    666:        // TODO: この位置にメッセージ ハンドラ用のコードを追加してください
                    667:        UpdateMetrics();
                    668: }
                    669:
                    670: void CAsir32guiView::OnDsolv()
                    671: {
                    672:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     673:        viewHtmlHelp("dsolv");
1.11      noro      674: }
                    675:
                    676: void CAsir32guiView::OnGnuplot()
                    677: {
                    678:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     679:        viewHtmlHelp("gnuplot");
1.11      noro      680: }
                    681:
                    682: void CAsir32guiView::OnOkdiff()
                    683: {
                    684:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     685:        viewHtmlHelp("ok_diff");
1.11      noro      686: }
                    687:
                    688: void CAsir32guiView::OnOkdmodule()
                    689: {
                    690:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     691:        viewHtmlHelp("ok_dmodule");
1.11      noro      692: }
                    693:
                    694: void CAsir32guiView::OnOm()
                    695: {
                    696:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     697:        viewHtmlHelp("om");
1.11      noro      698: }
                    699:
                    700: void CAsir32guiView::OnPfpcoh()
                    701: {
                    702:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     703:        viewHtmlHelp("pfpcoh");
1.11      noro      704: }
                    705:
                    706: void CAsir32guiView::OnPlucker()
                    707: {
                    708:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     709:        viewHtmlHelp("plucker");
1.11      noro      710: }
                    711:
                    712: void CAsir32guiView::OnSm1()
                    713: {
                    714:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     715:        viewHtmlHelp("sm1");
1.11      noro      716: }
                    717:
                    718: void CAsir32guiView::OnTigers()
1.6       noro      719: {
1.11      noro      720:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     721:        viewHtmlHelp("tigers");
1.9       noro      722: }
                    723:
1.11      noro      724: void CAsir32guiView::OnTodoparametrize()
1.9       noro      725: {
1.11      noro      726:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
1.21      ohara     727:        viewHtmlHelp("todo_parametrize");
1.1       noro      728: }
1.16      noro      729:
1.24      noro      730: void CAsir32guiView::OnNoromatrix()
                    731: {
                    732:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    733:        viewHtmlHelp("noro_matrix");
                    734: }
                    735:
                    736: void CAsir32guiView::OnNoromwl()
                    737: {
                    738:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    739:        viewHtmlHelp("noro_mwl");
                    740: }
                    741:
1.25      noro      742: void CAsir32guiView::OnNoropd()
                    743: {
                    744:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    745:        viewHtmlHelp("noro_pd");
                    746: }
                    747:
1.24      noro      748: void CAsir32guiView::OnNnndbf()
                    749: {
                    750:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    751:        viewHtmlHelp("nn_ndbf");
                    752: }
                    753:
1.25      noro      754: void CAsir32guiView::OnNstwistedlog()
                    755: {
                    756:        // TODO: この位置にコマンド ハンドラ用のコードを追加してください
                    757:        viewHtmlHelp("ns_twistedlog");
                    758: }
                    759:
1.16      noro      760: BOOL CAsir32guiView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
                    761: {
                    762:        // TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
                    763:
                    764:        BOOL ret = CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
1.26      ohara     765:        FILE *fp = NULL;
1.17      noro      766:        char *temp;
1.31      ohara     767:        char hndname[_MAX_PATH];
1.17      noro      768:
1.30      noro      769:        if ( asirgui_kind == ASIRGUI_MAIN ) {
                    770:                if ( temp = getenv("TEMP") ) {
                    771:                        sprintf(hndname,"%s\\asirgui.hnd", temp);
                    772:                        fp = fopen(hndname,"w");
                    773:                        if ( fp ) {
                    774:                                fprintf(fp,"%d",(unsigned int)theView->m_hWnd);
                    775:                                fclose(fp);
                    776:                        }
1.28      ohara     777:                }
                    778:        }
1.16      noro      779:        return ret;
                    780: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>