home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2002 March
/
VPR0203B.ISO
/
APUPDATE
/
VC
/
TXC0601S
/
TXC0601S.LZH
/
_IDMDISP.C
< prev
next >
Wrap
C/C++ Source or Header
|
2001-05-31
|
10KB
|
448 lines
/*
表示関係のIDMコマンド処理群
Start 99年11月19日
*/
#if __TXC__
#include <_wz.h>
#include <windows.h>
#include <windowsx.h>
#include <_idm.h>
#else
#include "_sys.h"
#endif
#include "_idmlib.h"
//##各種表示の切替
BOOL txIDM_SWITCHDISPUNDER(TX* text)
{
text->fDispUnder ^= TRUE;
txConfigSet(text);//WZ3.90J 981109
txDispAll(text);txFlushMenuCheckAll(text);
return TRUE;
}
BOOL txIDM_SWITCHDISPLINE(TX* text)
{
text->fDispLine ^= TRUE;
txConfigSet(text);//WZ3.90J 981109
txFlushCxBase(text);txDispAll(text);txFlushMenuCheckAll(text);txRulerFlushDisp(text);
return TRUE;
}
#if !POCKETWZ
BOOL txIDM_SWITCHDISPTOOLBAR(TX* text)
{
text->fDispToolbar ^= TRUE;txConfigSet(text);txFlushMenuCheckAll(text);txFlush(text);
return TRUE;
}
BOOL txIDM_SWITCHDISPRULER(TX* text)
{
text->fDispRuler ^= TRUE;txConfigSet(text);txFlushMenuCheckAll(text);txFlush(text);
return TRUE;
}
BOOL txIDM_SWITCHDISPTAB(TX* text)
{
text->fDispTab ^= TRUE;txConfigSet(text);txFlushMenuCheckAll(text);txFlush(text);
return TRUE;
}
BOOL txIDM_SWITCHDISPJSPACE(TX* text)
{
text->fDispJspace ^= TRUE;txConfigSet(text);txFlushMenuCheckAll(text);txFlush(text);
return TRUE;
}
BOOL txIDM_SWITCHWINDOWFULLY(TX* text)
{
HWND hwnd = text->hwndbase;
text->fDispFull ^= TRUE;txFlushMenuCheckAll(text);
txFlush(text);
if (text->fDispFull) {
{
RECT r;
RECT rc;
RECT rWork;
//wndtxGetOriginalRect(hwnd,&r);information("%d %d %d %d",r.top,r.left,r.right,r.bottom);
GetWindowRect(hwnd,&r);wndtxSetOriginalRect(hwnd,&r);
GetClientRect(hwnd,&rc);
ClientToScreen(hwnd,(POINT*)&rc);
GetWorkRect(&rWork);
r.top = rWork.top - (rc.top - r.top) + 2; // +2: for menubar access by mouse
r.bottom = rWork.bottom;
//information("%d %d %d %d",r.left,r.top,rectCx(&r),rectCy(&r));
wndtxSetPosSizeWork(hwnd,r.left,r.top,rectCx(&r),rectCy(&r));
}
} else {
RECT r;
wndtxGetOriginalRect(hwnd,&r);
//information("%d %d %d %d",r.top,r.left,r.right,r.bottom);
wndSetPosSize(hwnd,r.left,r.top,rectCx(&r),rectCy(&r));
}
return TRUE;
}
#endif
BOOL txIDM_SWITCHDISPTAG(TX* text)
{
txfTagSwitchDisp(text);
return TRUE;
}
BOOL txIDM_SWITCHSCROLLBARV(TX* text)
{
text->fScrollBarV ^= TRUE;
txFlushScrollBar(text);
txFlushMenuCheckAll(text);
return TRUE;
}
BOOL txIDM_SWITCHOUTLINE(TX* text)
{
if (text->hwndOutline) {
txolClose(text);
} else {
txolOpen(text);
}
txFlushMenuCheck(text,FMC_CONFIG); //WZ4.00Ec 010124
return TRUE;
}
BOOL txIDM_SWITCHLY(TX* text)
{
if (text->ly == text->lcySmupper) {
txSetLyCenter(text);
} else if (text->ly == txGetLyCenter(text)) {
txSetLy(text,text->lcywindow);
} else {
txSetLy(text,text->lcySmupper);
}
return TRUE;
}
//##表示の更新
static BOOL _txIDM_DISPALL(TX* text,int idm)
{
//WZ3.90H 980921 カーソル位置によって桁揃えがフラッシュされなかったのをなおした。
//WZ3.90J 981109 IDM_DISPALLでIDM_FLUSHTABLEを兼ねるようにした for メニュー割り当てコマンド数削減。
if (idm == IDM_DISPALL) text->fUndisp++;
if (text->fTxf) {
#if 0//WZ3.90O 981203 変だった。
if (txKeisenIsNeedOp(text,0) && txKeisenOp(text,0,"")) {
}
#endif
txfCellFlush(text);
txfBeamFlush(text,2);
text->fNoCheckEdit = TRUE;
} else if (text->fApfuBeamtab) {
txfBeamFlush(text,2);
text->fNoCheckEdit = TRUE;
}
if (idm == IDM_DISPALL) {
text->fUndisp--;
txDispAll(text);
}
return TRUE;
}
BOOL txIDM_DISPALL(TX* text)
{
return _txIDM_DISPALL(text,IDM_DISPALL);
}
BOOL txIDM_FLUSHTABLE(TX* text)
{
return _txIDM_DISPALL(text,IDM_FLUSHTABLE);
}
#if !__TXC__
BOOL txIDM_FLUSHTABLEALL(TX* text)
{
if (text->fTxf) {
txfCellFlushAll(text);
} else if (text->fApfuBeamtab) {
txBeamtabFlushAll(text);
}
return TRUE;
}
#endif // !__TXC__
BOOL txIDM_FLUSHOUTLINE(TX* text)
{
txolFlush(text);
return TRUE;
}
//##表示
BOOL txIDM_SETLYTOP(TX* text)
{
txSetLy(text,text->lcySmupper);
return TRUE;
}
BOOL txIDM_DISPCUR(TX* text)
{
TXCHAR ch = txGetChar(text);
#ifdef UNICODE
wstatprintf(TEXT("%d桁 %d行 文字コード:%04X"),text->lx+1,text->fLineD ? text->nline : text->npara,ch);
#else
statprintf(TEXT("%d桁 %d行 文字コード:%04X"),text->lx+1,text->fLineD ? text->nline : text->npara,ch);
#endif
// カーソルを大きく表示
text->fCursorBold++;
txDispCursor(text);
text->fCursorBold--;
return TRUE;
}
//##メニュー
#if !__TXC__
BOOL txIDM_CONTEXTMENU(TX* text)
{
#if 0//WZ4.00Ea 001202
if (text->fMailPreview) {
#if WZFUNC_EMAIL
mailerOpenMenuMouseRMessage(text);
#endif
} else
#endif
if (text->fContexthelp) {
//WZ4.00Dc 000326 コンテキストヘルプで、コンテキストメニューが出ないようにした。検索等すると落ちるので。
return FALSE;
} else {
HMENU hmenu = NULL;
#if WINDOWSCE
hmenu = LoadMenu(_hinstance,text->fClip ? IDM_CONTEXTMENU_EDITORCLIP : IDM_CONTEXTMENU_EDITOR);
if (hmenu) {
_txFlushMenuCheckExec(text,hmenu,FMC_ALL);
if (text->fByMouse) {
menuOpenMouse(GetSubMenu(hmenu,0));
} else {
txHmenuOpenKey(text,GetSubMenu(hmenu,0));
}
menuDelete(hmenu);
}
#else
if (text->fClip) {
hmenu = menuLoadMouseR(_szuiwz,text->szMenuMouseRClip[0] ? text->szMenuMouseRClip : (text->fTxf ? "TmlClip" : "StdClip"));
} else {
if (text->flpPreview) {
hmenu = menuLoad(_szuiwz,"Preview");
} else {
hmenu = menuLoadMouseR(_szuiwz,text->szMenuMouseR[0] ? text->szMenuMouseR : (text->fTxf ? "Tml" : "Std"));
}
}
if (hmenu) {
#if 1 //WZ3.90P 981207 WZテキストボックスでの右クリックメニューが死んでいた。
_txFlushMenuCheckExec(text,hmenu,FMC_ALL);
if (text->fFrame) {
if (text->fByMouse) { //WZ4.00Bl 990909 キーでコンテキストメニューを開いたときは、カーソル位置に表示。
menuOpenMouse(hmenu);
} else {
txHmenuOpenKey(text,hmenu);
}
menuDelete(hmenu);
} else {
int idm;
myEnableMenuItem(hmenu,IDM_UISAVE,FALSE);
myEnableMenuItem(hmenu,IDM_UICLOSE,FALSE);
if (text->fByMouse) { //WZ4.00Bl 990909
//WZ4.00Bn 991005 MENU_MOUSEを追加。
idm = menuOpenEx(hmenu,MENU_CMD|MENU_DELETE|MENU_MOUSE,0,0,text->hwndtext);
} else {
idm = txHmenuSelect(text,hmenu);
}
txIdmExec(text,idm);
}
#else
_txFlushMenuCheckExec(text,hmenu,FMC_ALL);
menuOpenMouse(hmenu);
menuDelete(hmenu);
#endif
}
#endif
}
return TRUE;
}
#endif // !__TXC__
//##ウィンドウ
#if !WINDOWSCE
BOOL txIDM_WINDOWFULLY(TX* text)
{
HWND hwnd = text->hwndbase;
RECT rWork;
RECT r;
//
#if 1 //WZ4.00Ec 010129
hwndGetWorkRect(hwnd,&rWork); //WZ4.00Ec 010129 マルチモニタ環境で、セカンダリで「高さを最大化」コマンドが効くようにした。動作未確認。
#else
#if UNIX
GetWorkRect(&rWork);
#else
SystemParametersInfo(SPI_GETWORKAREA,sizeof(RECT),&rWork,0);
#endif
#endif
GetWindowRect(hwnd,&r);
r.top = rWork.top;r.bottom = rWork.bottom;
wndSetPosSize(hwnd,r.left,r.top,rectCx(&r),rectCy(&r));
return TRUE;
}
#endif
#if !WINDOWSCE && !__TXC__ && WZFUNC_EDITOR
BOOL txIDM_WINDOWMULTI(TX* text)
{
txMultiWindow(text,FALSE);
return TRUE;
}
#endif
//##印刷
#if WZFUNC_PRINT
BOOL txIDM_SWITCHDETAIL(TX* text)
{
text->fDispDetail = text->fDispDetail ^ TRUE; // for __TXC__
if (text->fDispDetail) {
if (!text->flpPreview) txLpSwitchPreview(text);
} else {
if (text->flpPreview) txLpSwitchPreview(text);
}
return TRUE;
}
BOOL txIDM_UIPRINTSTYLE(TX* text)
{
txuiLpStyle(text);
return TRUE;
}
#if !__TXC__
BOOL txIDM_UIPRINTSTYLESET(TX* text)
{
//WZ4.00Ed 010302 new
txuiLpStyleDetail(text);
return TRUE;
}
#endif
BOOL txIDM_UIPRINT(TX* text)
{
txuiLprint(text);
return TRUE;
}
#if !__TXC__
BOOL txIDM_UIPRINTEXEC(TX* text)
{
txuiLprintExec(text);
PostMessage(text->hwndbase,WM_CLOSE,0,0); // 印刷が終わったら閉じる。
return TRUE;
}
#endif // !__TXC__
BOOL txIDM_PV_SWITCH(TX* text)
{
txLpSwitchPreview(text);
return TRUE;
}
static BOOL _txIDM_PV_ZOOMIN(TX* text,int idm)
{
int d = (idm == IDM_PV_ZOOMOUT) ? -1 : 1;
int skey = GetShiftKey();
int rate = 5;
//WZ4.00Bj 990830 プレビューの拡大縮小をShiftを押しながら行うと大きく、Ctrlを押しながらだと小さく行うようにした。
if (skey == SKEY_SHIFT) {
rate = 25;
} else if (skey == SKEY_CONTROL) {
rate = 1;
} else if (skey == SKEY_ALT) {
//WZ4.00Bj 990830 Alt+縮小でページ全体表示、Alt+拡大でページ横幅表示にした。
txLpSetRateAuto(text,(d == 1));
return TRUE;
}
txLpAddRate(text,rate*d);
return TRUE;
}
BOOL txIDM_PV_ZOOMOUT(TX* text)
{
return _txIDM_PV_ZOOMIN(text,IDM_PV_ZOOMOUT);
}
BOOL txIDM_PV_ZOOMIN(TX* text)
{
return _txIDM_PV_ZOOMIN(text,IDM_PV_ZOOMIN);
}
BOOL txIDM_PV_ZOOMOUTD(TX* text)
{
txLpAddRate(text,-1);
return TRUE;
}
BOOL txIDM_PV_ZOOMIND(TX* text)
{
txLpAddRate(text,1);
return TRUE;
}
BOOL txIDM_PV_ZOOMFIT(TX* text)
{
txLpSetRateAuto(text,0);
return TRUE;
}
BOOL txIDM_PV_ZOOMFITX(TX* text)
{
txLpSetRateAuto(text,1);
return TRUE;
}
BOOL txIDM_PV_ZOOMUNDO(TX* text)
{
if (text->pvRate0) txLpSetRate(text,text->pvRate0);
text->pvRate0 = 0;
return TRUE;
}
#endif // WZFUNC_PRINT
//##プラグイン
#if __TXC__
void __pluginGetProperty(mchar* prop,txstr res)
{
//information("%s",prop);
if (!stricmp(prop,"name")) res = "表示IDM処理";
if (!stricmp(prop,"author")) res = sysGetName();
if (!stricmp(prop,"version")) res = sysGetVersionPrim();
}
static HOOKRESULT CALLBACK wndprocTextHook(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
if (message == WM_TXEVENT && wParam == TXEVENT_IDMEXEC) {
TX* text = hwndtextGetText(hwnd);
int idm = lParam;
switch(idm) {
case IDM_FLUSHOUTLINE: { // サンプル
statprintf("IDM_FLUSHOUTLINE by macro");
txIDM_FLUSHOUTLINE(text);
return HOOK_CAPTURE;
}
}
}
return HOOK_CONTINUE;
}
void __on_txFrameNew(TX* text)
{
txSetHookWndproctextTxpcode(text,wndprocTextHook);
}
#endif