⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tabprop.c

📁 CVI教程,用于信号采集系统的多任务开发软件.学习简单,功能实用.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <ansi_c.h>#include <userint.h>#include "toolbox.h"#include "easytab.h"#include "tabprpui.h"#include "tabprop.h"#define TAB_EDIT_TYPE               "EditTabDlg"#define TAB_RCLICK_EDIT_TYPE "EasyTabRightClickEdit"#define TAB_EDIT_METAFONT_NAME      "Tab Edit Meta Font"static int gMetaFontSuffix = 1;typedef struct    {    int panel;    int tabCtrl;    int editDlg;    int tabsPanel;    int fontPanel;    int tabAttrsPanel;    int boundsPanel;    } TabEditDlg;typedef struct    {    int enabled;    } RightClickEditInfo;        static int      TabEdit_LoadDialog(TabEditDlg *info);static void     TabEdit_UpdateBoundsDisplay(TabEditDlg *info);static void     TabEdit_UpdateValues(TabEditDlg *info);static int      TabEdit_ChainDlgCallbackData(TabEditDlg *info, int panel);static ListType TabEdit_GetActiveDlgList(void);static int      TabEdit_PositionInActiveDlgList(int panel, int tabCtrl);static int      TabEdit_Create(int panel, int easyTabCtrl, TabEditDlg **newInfo);static void     TabEdit_Discard(TabEditDlg *info);static int      TabEdit_Apply(TabEditDlg *info);static void     TabEdit_InitValues(TabEditDlg *info);static void     TabEdit_UpdateUserSpecifiedBounds(TabEditDlg *info);static void     TabEdit_UpdateAttrValues(TabEditDlg *info);int CVICALLBACK RightClickEditCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2);/***************************************************************/static int TabEdit_LoadDialog(TabEditDlg *info){    int error = 0;    int editDlg;        errChk( info->editDlg = LoadPanel(0, "tabprpui.uir", EDIT));        errChk( EasyTab_ConvertFromCanvas(info->editDlg, EDIT_CANVAS));    errChk( EasyTab_LoadPanels (info->editDlg, EDIT_CANVAS, 1, "tabprpui.uir", __CVIUserHInst,                        TABS, &info->tabsPanel, BOUNDS, &info->boundsPanel,                         FONT, &info->fontPanel, TAB_ATTRS, &info->tabAttrsPanel, ABOUT, 0, 0));    errChk(TabEdit_ChainDlgCallbackData(info, info->editDlg));    Error:    return error;}/***************************************************************/    /*  Recursively chain the callback data of the panel, its controls, and all child panels, etc. to be        the TabEditDlg structure so dialog callback events can know which dialog and which easyTab control        they are dealing with.    */static int TabEdit_ChainDlgCallbackData(TabEditDlg *info, int panel){    int error = 0;    int ctrl;    int child;        errChk( ChainPanelCallback(panel, NULL, info, TAB_EDIT_TYPE));    GetPanelAttribute(panel, ATTR_PANEL_FIRST_CTRL, &ctrl);        while (ctrl > 0)        {        errChk( ChainCtrlCallback (panel, ctrl, NULL, info, TAB_EDIT_TYPE));        GetCtrlAttribute(panel, ctrl, ATTR_NEXT_CTRL, &ctrl);        }        GetPanelAttribute(panel, ATTR_FIRST_CHILD, &child);    while (child > 0)        {        errChk( TabEdit_ChainDlgCallbackData(info, child));        GetPanelAttribute(child, ATTR_NEXT_PANEL, &child);        }        Error:    return error;}/***************************************************************/    /*  keep a list of the active tab property editing dialogs */static ListType TabEdit_GetActiveDlgList(void){    static ListType activeList = 0;        if (!activeList)        activeList = ListCreate(sizeof(TabEditDlg *));        return activeList;}/***************************************************************/int CVICALLBACK RightClickEditCallback (int panel, int control, int event, void *callbackData, int eventData1, int eventData2){    RightClickEditInfo  *info = 0;    if (event == EVENT_RIGHT_CLICK)        {        if (GetChainedCallbackData (panel, control, TAB_RCLICK_EDIT_TYPE, (void **)&info) >= 0)            {            if (info->enabled)                EditTabProperties(panel, control);            }        }    return 0;}/***************************************************************/int EasyTab_EnableRClickEditing(int panel, int tabCtrl, int enabled){    int                 error = 0;    RightClickEditInfo  *newInfo = 0;    RightClickEditInfo  *info = 0;    int                 dummyColor;        errChk( EasyTab_GetAttribute (panel, tabCtrl, ATTR_EASY_TAB_LABEL_COLOR, &dummyColor));     /* call an easytab function to force an error if the control is not an easytab control */    if ( GetChainedCallbackData (panel, tabCtrl, TAB_RCLICK_EDIT_TYPE, (void **)&info) >= 0)        info->enabled = enabled;    else        {        nullChk( newInfo = (RightClickEditInfo *)calloc(sizeof(*newInfo), 1));        newInfo->enabled = enabled;        errChk( ChainCtrlCallback (panel, tabCtrl, RightClickEditCallback, newInfo, TAB_RCLICK_EDIT_TYPE));        }        Error:    if (error < 0)        {        free(newInfo);        return error;        }    else        return 0;}/***************************************************************/int EditTabProperties(int panel, int easyTabCtrl){    int         error = 0;    TabEditDlg  *info = NULL;       int         position;        position = TabEdit_PositionInActiveDlgList(panel, easyTabCtrl);        if (position > 0)        ListGetItem(TabEdit_GetActiveDlgList(), &info, position);    else    /* if there isn't a property editing dialog active for this easy tab control, make one */        errChk( TabEdit_Create(panel, easyTabCtrl, &info));            DisplayPanel(info->editDlg);    Error:    return error;}/***************************************************************/static int TabEdit_Create(int panel, int easyTabCtrl, TabEditDlg **newInfo){    int         error = 0;    TabEditDlg  *info = 0;    ListType    dlgList;        *newInfo = NULL;    nullChk( dlgList = TabEdit_GetActiveDlgList());    info = calloc(sizeof(*info), 1);    info->panel = panel;    info->tabCtrl = easyTabCtrl;    errChk( TabEdit_LoadDialog(info));    TabEdit_InitValues(info);    nullChk( ListInsertItem(dlgList, &info, END_OF_LIST));    Error:    if (error < 0)        TabEdit_Discard(info);    else        *newInfo = info;            return error;}/***************************************************************/    /*  returns list index, or 0 if not in the list */static int TabEdit_PositionInActiveDlgList(int panel, int tabCtrl){    int         index;    int         numItems;    ListType    dlgList;    TabEditDlg  *currInfo;    if (dlgList = TabEdit_GetActiveDlgList())        {        numItems = ListNumItems(dlgList);        for (index = 1; index <= numItems; index++)            {            ListGetItem(dlgList, &currInfo, index);            if (currInfo->panel == panel && currInfo->tabCtrl == tabCtrl)                return index;            }               }    return 0;}/***************************************************************/static void TabEdit_Discard(TabEditDlg *info){    if (info)        {        int position;            position = TabEdit_PositionInActiveDlgList(info->panel, info->tabCtrl);            if (position > 0)            ListRemoveItem(TabEdit_GetActiveDlgList(), 0, position);                if (info->editDlg > 0)            DiscardPanel(info->editDlg);        free(info);        }}/***************************************************************/static void TabEdit_InitValues(TabEditDlg *info){    ListType    panelList = NULL;    int         numItems = 0;    int         index;    int         panel;    char        title[256];        EasyTab_GetPanelList(info->panel, info->tabCtrl, &panelList);    if (panelList)        {        ClearListCtrl(info->tabsPanel, TABS_ACTIVE);        numItems = ListNumItems(panelList);                for (index = 1; index <= numItems; index++)            {            ListGetItem(panelList, &panel, index);            GetPanelAttribute(panel, ATTR_TITLE, title);            RemoveAcceleratorEscapeCode(title);            InsertListItem (info->tabsPanel, TABS_ACTIVE, -1, title, panel);            InsertListItem (info->tabAttrsPanel, TAB_ATTRS_WHICHTAB, -1, title, panel);            }        }    SetCtrlAttribute(info->tabsPanel, TABS_ACTIVE, ATTR_DIMMED, numItems <= 0);     TabEdit_UpdateValues(info);    TabEdit_UpdateUserSpecifiedBounds(info);       ListDispose(panelList);}/***************************************************************/static void TabEdit_UpdateTabAttrValues(TabEditDlg *info){    int     numPanels;    int     whichPanel;    int     textLength;    char    *text = 0;    int     visible;    int     bgColor;    int     dimmed;    GetNumListItems (info->tabAttrsPanel, TAB_ATTRS_WHICHTAB, &numPanels);    if (numPanels > 0)          {        GetCtrlVal(info->tabAttrsPanel, TAB_ATTRS_WHICHTAB, &whichPanel);        EasyTab_GetTabAttribute(info->panel, info->tabCtrl, whichPanel, ATTR_EASY_TAB_LABEL_TEXT_LENGTH, &textLength);        text = (char *)malloc(textLength+1);        EasyTab_GetTabAttribute(info->panel, info->tabCtrl, whichPanel, ATTR_EASY_TAB_LABEL_TEXT, text);        EasyTab_GetTabAttribute(info->panel, info->tabCtrl, whichPanel, ATTR_EASY_TAB_VISIBLE, &visible);        EasyTab_GetTabAttribute(info->panel, info->tabCtrl, whichPanel, ATTR_EASY_TAB_LABEL_BG_COLOR, &bgColor);        EasyTab_GetTabAttribute(info->panel, info->tabCtrl, whichPanel, ATTR_EASY_TAB_DIMMED, &dimmed);                SetCtrlVal (info->tabAttrsPanel, TAB_ATTRS_LABELTEXT, text);        SetCtrlVal (info->tabAttrsPanel, TAB_ATTRS_VISIBLE, visible);        SetCtrlVal (info->tabAttrsPanel, TAB_ATTRS_LABELBGCOLOR, bgColor);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -