bool unloadInfoWin() { DataBrowserCallbacks dbc; ControlRef cRef; ControlID cID; cID.signature = FOUR_CHAR_CODE('tags'); cID.id = 16; if (noErr == GetControlByID(g_refInfoWin, &cID, &cRef)) { dbc.version = kDataBrowserLatestCallbacks; if (noErr == InitDataBrowserCallbacks(&dbc)) { SetDataBrowserCallbacks(cRef, &dbc); } } clearInfoWin(); HideWindow(g_refInfoWin); RemoveEventHandler(g_refInfoHdlr); DisposeWindow(g_refInfoWin); DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); /* Clean up any previous contents */ return true; }
// -------------------------------------------------------------------------------------- ControlRef CreateIconDataBrowser(WindowRef window, const Rect *dbRect, ControlRef *userPanes) { ControlRef dataBrowserControl; DataBrowserListViewColumnDesc columnDesc; DataBrowserItemID firstItem; CreateDataBrowserControl(window, dbRect, kDataBrowserListView, &dataBrowserControl); SetDataBrowserHasScrollBars(dataBrowserControl, false, true); SetDataBrowserSelectionFlags(dataBrowserControl, kDataBrowserDragSelect | kDataBrowserSelectOnlyOne); SetDataBrowserListViewHeaderBtnHeight(dataBrowserControl, 0); // no header button SetDataBrowserTableViewHiliteStyle(dataBrowserControl, kDataBrowserTableViewFillHilite); // because kDataBrowserTableViewMinimalHilite would require us to provide a hit test // callback which we would just return true from anyways columnDesc.propertyDesc.propertyID = kCategoryProperty; columnDesc.propertyDesc.propertyType = kDataBrowserCustomType; // because // kDataBrowserIconAndTextType doesn't draw the way we want columnDesc.propertyDesc.propertyFlags = kDataBrowserDefaultPropertyFlags | kDataBrowserListViewSelectionColumn; columnDesc.headerBtnDesc.version = kDataBrowserListViewLatestHeaderDesc; columnDesc.headerBtnDesc.minimumWidth = kColumnWidth; columnDesc.headerBtnDesc.maximumWidth = kColumnWidth; columnDesc.headerBtnDesc.titleOffset = 0; columnDesc.headerBtnDesc.titleString = NULL; columnDesc.headerBtnDesc.initialOrder = kDataBrowserOrderIncreasing; columnDesc.headerBtnDesc.btnFontStyle.flags = 0; columnDesc.headerBtnDesc.btnContentInfo.contentType = kControlNoContent; AddDataBrowserListViewColumn(dataBrowserControl, &columnDesc, kDataBrowserListViewAppendColumn); /* We need to wait to set the row height until here because AddDataBrowserListViewColumn will resize the row height. */ #if TARGET_API_MAC_OSX SetDataBrowserTableViewRowHeight(dataBrowserControl, kRowHeight); #else // Mac OS 8/9 under CarbonLib adds 1 to the row height you provide SetDataBrowserTableViewRowHeight(dataBrowserControl, kRowHeight - 1); #endif SetDataBrowserListViewUsePlainBackground(dataBrowserControl, true); if (gCallbackRefCount == 0) { gIconDBCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP(IconDataBrowserItemSelectionCB); gIconDBCustomCallbacks.u.v1.drawItemCallback = NewDataBrowserDrawItemUPP(DrawIconDataBrowserItemCB); } SetDataBrowserCallbacks(dataBrowserControl, &gIconDBCallbacks); SetDataBrowserCustomCallbacks(dataBrowserControl, &gIconDBCustomCallbacks); gCallbackRefCount++; firstItem = addItemsToIconDB(dataBrowserControl, userPanes); SetDataBrowserSelectedItems(dataBrowserControl, 1, &firstItem, kDataBrowserItemsAssign); SetKeyboardFocus(window, dataBrowserControl, kControlFocusNextPart); return dataBrowserControl; }
pascal OSStatus gensetup_update_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TGENSETUP *gensetup_t = (TGENSETUP *) inUserData; DataBrowserItemID item = DBITEM_ID + 1, first, last; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (gensetup_t) { GetThemeDrawingState (&outState); GetControlData (gensetup_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (gensetup_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); if(GetDataBrowserSelectionAnchor (gensetup_t->key_list, &first, &last) == noErr) { i = first - DBITEM_ID - 1; item += i; } else i = 0; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (gensetup_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (gensetup_t->key_list, DBITEM_ID); /* An update operation */ if(i<DSNSETUP_nrows) { CFRelease (DSNSETUP_array[0][i]); CFRelease (DSNSETUP_array[1][i]); DSNSETUP_array[0][i] = data[0]; DSNSETUP_array[1][i] = data[1]; UpdateDataBrowserItems (gensetup_t->key_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } for(j = 0 ; j < DSNSETUP_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (gensetup_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (gensetup_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (gensetup_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } SetControlData (gensetup_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->key_entry); SetControlData (gensetup_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (gensetup_t->value_entry); DeactivateControl (DSNSETUP->bupdate); DrawOneControl (DSNSETUP->bupdate); } return noErr; }
static void addkeywords_to_list (ControlRef widget, LPCSTR attrs, TGENSETUP * gensetup_t) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; char *curr, *cour; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (dsnsetup_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (dsnsetup_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < DSNSETUP_nrows; i++) { CFRelease (DSNSETUP_array[0][i]); DSNSETUP_array[0][i] = NULL; CFRelease (DSNSETUP_array[1][i]); DSNSETUP_array[1][i] = NULL; } /* Global Initialization */ DSNSETUP_nrows = 0; item = DBITEM_ID + 1; for (curr = (LPSTR) attrs; *curr; curr += (STRLEN (curr) + 1)) { if (!strncasecmp (curr, "DSN=", STRLEN ("DSN=")) || !strncasecmp (curr, "Driver=", STRLEN ("Driver=")) || !strncasecmp (curr, "Description=", STRLEN ("Description="))) continue; if ((cour = strchr ((char*)curr, '='))) { *cour = '\0'; DSNSETUP_array[0][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, curr, kCFStringEncodingUTF8); *cour = '='; DSNSETUP_array[1][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, ((char*)cour) + 1, kCFStringEncodingUTF8); } else DSNSETUP_array[0][DSNSETUP_nrows] = CFStringCreateWithCString (NULL, "", kCFStringEncodingUTF8); for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (DSNSETUP_array[i][DSNSETUP_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, GSKEYWORD_ID); item++; DSNSETUP_nrows++; } ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, GSVALUE_ID, colSize[1] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); }
void ConfigureCheat (void) { if (!cartOpen) return; OSStatus err; IBNibRef nibRef; err = CreateNibReference(kMacS9XCFString, &nibRef); if (err == noErr) { err = CreateWindowFromNib(nibRef, CFSTR("CheatEntry"), &wRef); if (err == noErr) { DataBrowserCallbacks callbacks; EventHandlerRef eref; EventHandlerUPP eUPP; EventTypeSpec events[] = { { kEventClassCommand, kEventCommandProcess }, { kEventClassCommand, kEventCommandUpdateStatus }, { kEventClassWindow, kEventWindowClose } }; HIViewRef ctl, root; HIViewID cid; root = HIViewGetRoot(wRef); cid.id = 0; cid.signature = kDataBrowser; HIViewFindByID(root, cid, &dbRef); #ifdef MAC_PANTHER_SUPPORT if (systemVersion < 0x1040) { HISize minSize; Rect rct; GetWindowBounds(wRef, kWindowContentRgn, &rct); minSize.width = (float) (rct.right - rct.left); minSize.height = (float) (rct.bottom - rct.top ); err = SetWindowResizeLimits(wRef, &minSize, NULL); } #endif callbacks.version = kDataBrowserLatestCallbacks; err = InitDataBrowserCallbacks(&callbacks); callbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP(DBClientDataCallback); callbacks.u.v1.itemCompareCallback = NewDataBrowserItemCompareUPP(DBCompareCallBack); callbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP(DBItemNotificationCallBack); err = SetDataBrowserCallbacks(dbRef, &callbacks); if (systemVersion >= 0x1040) err = DataBrowserChangeAttributes(dbRef, kDataBrowserAttributeListViewAlternatingRowColors, kDataBrowserAttributeNone); InitCheatItems(); ImportCheatItems(); DataBrowserItemID *id; id = new DataBrowserItemID[MAC_MAX_CHEATS]; if (!id) QuitWithFatalError(0, "cheat 01"); numofcheats = 0; for (unsigned int i = 0; i < MAC_MAX_CHEATS; i++) { if (citem[i].valid) { id[numofcheats] = citem[i].id; numofcheats++; } } if (numofcheats) err = AddDataBrowserItems(dbRef, kDataBrowserNoItem, numofcheats, id, kDataBrowserItemNoProperty); delete [] id; cid.signature = kNewButton; HIViewFindByID(root, cid, &ctl); if (numofcheats == MAC_MAX_CHEATS) err = DeactivateControl(ctl); else err = ActivateControl(ctl); cid.signature = kAllButton; HIViewFindByID(root, cid, &ctl); if (numofcheats == 0) err = DeactivateControl(ctl); else err = ActivateControl(ctl); cid.signature = kDelButton; HIViewFindByID(root, cid, &ctl); err = DeactivateControl(ctl); eUPP = NewEventHandlerUPP(CheatEventHandler); err = InstallWindowEventHandler(wRef, eUPP, GetEventTypeCount(events), events, (void *) wRef, &eref); err = SetKeyboardFocus(wRef, dbRef, kControlFocusNextPart); MoveWindowPosition(wRef, kWindowCheatEntry, true); ShowWindow(wRef); err = RunAppModalLoopForWindow(wRef); HideWindow(wRef); SaveWindowPosition(wRef, kWindowCheatEntry); err = RemoveEventHandler(eref); DisposeEventHandlerUPP(eUPP); DisposeDataBrowserItemNotificationUPP(callbacks.u.v1.itemNotificationCallback); DisposeDataBrowserItemCompareUPP(callbacks.u.v1.itemCompareCallback); DisposeDataBrowserItemDataUPP(callbacks.u.v1.itemDataCallback); CFRelease(wRef); DetachCheatItems(); } DisposeNibReference(nibRef); } }
OSStatus InitDataBrowserControl() { DataBrowserCallbacks myCallbacks; ControlID controlID = { kNSLSample, kUserPaneControl }; ControlRef control; Rect outRect; OSStatus err; int i; err = GetControlByID(gMainWindow, &controlID, &control); if (err == noErr) { GetControlBounds(control, &outRect); DisposeControl(control); } else { return err; } if (gDataBrowserControl == NULL) { err = CreateDataBrowserControl(gMainWindow, &outRect, kDataBrowserListView, &gDataBrowserControl); if (err == noErr) { AdvanceKeyboardFocus(gMainWindow); SetDataBrowserHasScrollBars(gDataBrowserControl, false, true); SetDataBrowserTableViewRowHeight(gDataBrowserControl, kDataBrowserRowHeight); SetDataBrowserSortOrder(gDataBrowserControl, kDataBrowserOrderIncreasing); SetDataBrowserSelectionFlags(gDataBrowserControl, kDataBrowserSelectOnlyOne); SetDataBrowserListViewUsePlainBackground(gDataBrowserControl, false); myCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks(&myCallbacks); #if USE_OLD_DATA_BROWSER_STRUCTS myCallbacks.u.v1.clientDataCallback = NewDataBrowserItemDataUPP((DataBrowserItemDataProcPtr)MySimpleDataCallback); myCallbacks.u.v1.compareCallback = NewDataBrowserItemCompareUPP((DataBrowserItemCompareProcPtr)MyDataBrowserItemCompareUPP); #else myCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP((DataBrowserItemDataProcPtr)MySimpleDataCallback); myCallbacks.u.v1.itemCompareCallback = NewDataBrowserItemCompareUPP((DataBrowserItemCompareProcPtr)MyDataBrowserItemCompareUPP); #endif myCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP((DataBrowserItemNotificationProcPtr)MySimpleNotificationCallback); err = SetDataBrowserCallbacks(gDataBrowserControl, &myCallbacks); if (err != noErr) return err; } else { return err; } } err = AddNameColumnToList(); if (err == noErr) { SetDataBrowserListViewDisclosureColumn(gDataBrowserControl, kNameColumn, false); SetDataBrowserSortProperty(gDataBrowserControl, kNameColumn); for (i = 0; i < kMaxNeighborhoods; i++) { gNeighborhoodInfo.neighborhoodSize[i] = 0; gNeighborhoodInfo.isNeighborhoodOpen[i] = false; gNeighborhoodInfo.isDefaultNeighborhood[i] = false; gNeighborhoodInfo.isNeighborhoodVisible[i] = false; gLookupInfo[i + 1].sLookupActive = false; gLookupInfo[i + 1].nLookupActive = false; } gNeighborhoodInfo.neighborhoodCount = 0; gSelectedItem = 0; DoNeighborhoodLookup(kDefaultNeighborhoods); } return err; }
static OSStatus SetupUserInterface(void) // Create a user interface from our NIB. { OSStatus err; IBNibRef nibRef; Handle menuBar; nibRef = NULL; menuBar = NULL; err = CreateNibReference(CFSTR("LoginItemsAETest"), &nibRef); if (err == noErr) { err = CreateMenuBarFromNib(nibRef, CFSTR("MenuBar"), &menuBar); } if (err == noErr) { SetMenuBar(menuBar); } if (err == noErr) { err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &gMainWindow); } if (err == noErr) { ControlID theID; theID.signature = 'HDCB'; theID.id = 0; err = GetControlByID(gMainWindow, &theID, &gAddHiddenControl); } // Find and set up the data browser control. if (err == noErr) { ControlID theID; theID.signature = 'DATA'; theID.id = 0; err = GetControlByID(gMainWindow, &theID, &gDataControl); } if (err == noErr) { DataBrowserCallbacks callbacks; callbacks.version = kDataBrowserLatestCallbacks; err = InitDataBrowserCallbacks(&callbacks); if (err == noErr) { callbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP(DataBrowserDataCallback); err = SetDataBrowserCallbacks(gDataControl, &callbacks); } } if (err == noErr) { DoRefresh(); } if (err == noErr) { ShowWindow(gMainWindow); } if (nibRef != NULL) { DisposeNibReference(nibRef); } if (menuBar != NULL) { DisposeHandle(menuBar); } return err; }
OPL_LoginDialog::OPL_LoginDialog(CFStringRef resname, CFStringRef title): OPL_Dialog(resname), cur_dir(NULL), tab_number(-1) { OSStatus err; OPL_LoginDialog *dlg = this; SQLSetConfigMode (ODBC_BOTH_DSN); if (!SQLGetPrivateProfileString("ODBC", "FileDSNPath", "", def_path, sizeof(def_path), "odbcinst.ini")) #if defined(DEFAULT_FILEDSNPATH) strcpy(def_path, DEFAULT_FILEDSNPATH); #else strcpy(def_path, "/etc/ODBCDataSources"); #endif setTitle(title); getControl(kLoginTABS, &tab_panel); getControl(kLoginDSN_TAB, &tabs[0]); getControl(kLoginFDSN_TAB, &tabs[1]); getControl(kLoginDSNL, &dsnView); getControl(kLoginFDSNL, &fdsnView); // create instance data and associate it with the control dsnlist = new OPL_DSNList(dsnView); err = SetControlProperty(dsnView, kPropertyCreator, kPropertyTag, sizeof(dsnlist), &dsnlist); require_noerr(err, error); fdsnlist = new OPL_DSNList(fdsnView); err = SetControlProperty(fdsnView, kPropertyCreator, kPropertyTag, sizeof(fdsnlist), &fdsnlist); require_noerr(err, error); // set DSN browser callbacks DataBrowserCallbacks dsnViewCallbacks; dsnViewCallbacks.version = kDataBrowserLatestCallbacks; err = InitDataBrowserCallbacks(&dsnViewCallbacks); require_noerr(err, error); static DataBrowserItemDataUPP g_dsnItemDataUPP = NULL; if (!g_dsnItemDataUPP) { g_dsnItemDataUPP = NewDataBrowserItemDataUPP( OPL_DSNItemViewItemDataCallback); } dsnViewCallbacks.u.v1.itemDataCallback = g_dsnItemDataUPP; err = SetDataBrowserCallbacks(dsnView, &dsnViewCallbacks); require_noerr(err, error); // set FDSN browser callbacks DataBrowserCallbacks fdsnViewCallbacks; fdsnViewCallbacks.version = kDataBrowserLatestCallbacks; err = InitDataBrowserCallbacks(&fdsnViewCallbacks); require_noerr(err, error); static DataBrowserItemDataUPP g_fdsnItemDataUPP = NULL; if (!g_fdsnItemDataUPP) { g_fdsnItemDataUPP = NewDataBrowserItemDataUPP( OPL_DSNItemViewItemDataCallback); } static DataBrowserItemNotificationUPP g_fdsnItemNotificationUPP = NULL; if (!g_fdsnItemNotificationUPP) { g_fdsnItemNotificationUPP = NewDataBrowserItemNotificationUPP( OPL_DSN_notification_item); } fdsnViewCallbacks.u.v1.itemNotificationCallback = g_fdsnItemNotificationUPP; fdsnViewCallbacks.u.v1.itemDataCallback = g_fdsnItemDataUPP; err = SetDataBrowserCallbacks(fdsnView, &fdsnViewCallbacks); require_noerr(err, error); SetWindowProperty(getWindow(), kPropertyCreator, kPropertyTag, sizeof(dlg), &dlg); DisplayTabControl (0, tab_panel, 2, tabs); loadDSNList(); loadFDSNList(def_path); error: return; }
pascal OSStatus keyval_add_clicked (EventHandlerCallRef inHandlerRef, EventRef inEvent, void *inUserData) { TKEYVAL *keyval_t = (TKEYVAL *) inUserData; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[2] = { 150, 250 }; SInt16 outBaseline; Point ioBound; CFStringRef data[2]; Size len; int i = 0, j; if (keyval_t) { GetThemeDrawingState (&outState); GetControlData (keyval_t->key_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[0], &len); if (CFStringGetLength(data[0])) { GetControlData (keyval_t->value_entry, 0, kControlEditTextCFStringTag, sizeof (CFStringRef), &data[1], &len); /* Try to see if the keyword already exists */ for (i = 0; i < KEYVAL_nrows; i++, item++) if (CFStringCompare (data[0], KEYVAL_array[0][i], 0) == kCFCompareEqualTo) goto done; /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (keyval_notification_item); /* On Mac OS X 10.0.x : this is clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (keyval_getset_item); SetDataBrowserCallbacks (keyval_t->key_list, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (keyval_t->key_list, DBITEM_ID); /* An update operation */ if(i<KEYVAL_nrows) { CFRelease (KEYVAL_array[1][i]); KEYVAL_array[1][i] = data[1]; UpdateDataBrowserItems (keyval_t->key_list, DBITEM_ID, 1, &item, GSKEYWORD_ID, kDataBrowserItemNoProperty); } else if(len) { KEYVAL_array[0][i] = data[0]; KEYVAL_array[1][i] = data[1]; AddDataBrowserItems (keyval_t->key_list, DBITEM_ID, 1, &item, GSKEYWORD_ID); KEYVAL_nrows++; } for(j = 0 ; j < KEYVAL_nrows ; j++) { for(i = 0 ; i < 2 ; i++) { GetThemeTextDimensions (KEYVAL_array[i][j], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } } ActivateControl (keyval_t->key_list); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (keyval_t->key_list, GSKEYWORD_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (keyval_t->key_list, GSVALUE_ID, colSize[1] + 20); DrawOneControl (keyval_t->key_list); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); } done: SetControlData (keyval_t->key_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (keyval_t->key_entry); SetControlData (keyval_t->value_entry, 0, kControlEditTextTextTag, 0, ""); DrawOneControl (keyval_t->value_entry); DeactivateControl (KEYVAL->bupdate); DrawOneControl (KEYVAL->bupdate); } return noErr; }
/* Changed ... Have to implement the same for translators */ void adddrivers_to_list (ControlRef widget, WindowRef dlg, BOOL addNotify) { wchar_t drvdesc[1024], drvattrs[1024], driver[1024]; DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[5] = { 150, 150, 100, 50 , 50}; void *handle; SInt16 outBaseline; Point ioBound; struct stat _stat; SQLSMALLINT len, len1; SQLRETURN ret; HENV henv, drv_henv; HDBC drv_hdbc; pSQLGetInfoFunc funcHdl; pSQLAllocHandle allocHdl; pSQLAllocEnv allocEnvHdl = NULL; pSQLAllocConnect allocConnectHdl = NULL; pSQLFreeHandle freeHdl; pSQLFreeEnv freeEnvHdl; pSQLFreeConnect freeConnectHdl; char *_drv_u8 = NULL; int i; if (!widget) return; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); if (addNotify) dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (drivers_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (drivers_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < Drivers_nrows; i++, item++) { CFRelease (Drivers_array[0][i]); Drivers_array[0][i] = NULL; CFRelease (Drivers_array[1][i]); Drivers_array[1][i] = NULL; CFRelease (Drivers_array[2][i]); Drivers_array[2][i] = NULL; CFRelease (Drivers_array[3][i]); Drivers_array[3][i] = NULL; CFRelease (Drivers_array[4][i]); Drivers_array[4][i] = NULL; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } /* Global Initialization */ Drivers_nrows = 0; item = DBITEM_ID + 1; /* Create a HENV to get the list of drivers then */ ret = SQLAllocHandle (SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto end; } /* Set the version ODBC API to use */ SQLSetEnvAttr (henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_UINTEGER); /* Get the list of drivers */ ret = SQLDriversW (henv, SQL_FETCH_FIRST, drvdesc, sizeof (drvdesc)/sizeof(wchar_t), &len, drvattrs, sizeof (drvattrs)/sizeof(wchar_t), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } while (ret != SQL_NO_DATA) { Drivers_array[0][Drivers_nrows] = convert_wchar_to_CFString(drvdesc); /* Get the driver library name */ SQLSetConfigMode (ODBC_BOTH_DSN); SQLGetPrivateProfileStringW (drvdesc, L"Driver", L"", driver, sizeof (driver)/sizeof(wchar_t), L"odbcinst.ini"); if (driver[0] == L'\0') SQLGetPrivateProfileStringW (L"Default", L"Driver", L"", driver, sizeof (driver)/sizeof(wchar_t), L"odbcinst.ini"); if (driver[0] == L'\0') { if (Drivers_array[0][Drivers_nrows]) { CFRelease (Drivers_array[0][Drivers_nrows]); Drivers_array[0][Drivers_nrows] = NULL; } goto skip; } Drivers_array[1][Drivers_nrows] = convert_wchar_to_CFString(driver); /* Alloc a connection handle */ drv_hdbc = NULL; drv_henv = NULL; _drv_u8 = (char *) dm_SQL_WtoU8((SQLWCHAR*)driver, SQL_NTS); if (_drv_u8 == NULL) goto skip; if ((handle = DLL_OPEN(_drv_u8)) != NULL) { if ((allocHdl = (pSQLAllocHandle)DLL_PROC(handle, "SQLAllocHandle")) != NULL) { ret = allocHdl(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &drv_henv); if (ret == SQL_ERROR) goto nodriverver; ret = allocHdl(SQL_HANDLE_DBC, drv_henv, &drv_hdbc); if (ret == SQL_ERROR) goto nodriverver; } else { if ((allocEnvHdl = (pSQLAllocEnv)DLL_PROC(handle, "SQLAllocEnv")) != NULL) { ret = allocEnvHdl(&drv_henv); if (ret == SQL_ERROR) goto nodriverver; } else goto nodriverver; if ((allocConnectHdl = (pSQLAllocConnect)DLL_PROC(handle, "SQLAllocConnect")) != NULL) { ret = allocConnectHdl(drv_henv, &drv_hdbc); if (ret == SQL_ERROR) goto nodriverver; } else goto nodriverver; } /* * Use SQLGetInfoA for Unicode drivers * and SQLGetInfo for ANSI drivers */ funcHdl = (pSQLGetInfoFunc)DLL_PROC(handle, "SQLGetInfoA"); if (!funcHdl) funcHdl = (pSQLGetInfoFunc)DLL_PROC(handle, "SQLGetInfo"); if (funcHdl) { /* Retrieve some informations */ ret = funcHdl (drv_hdbc, SQL_DRIVER_VER, drvattrs, sizeof(drvattrs), &len); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { char *p = drvattrs; /* Find the description if one provided */ for (; *p ; p++) { if (*p == ' ') { *p++ = '\0'; break; } } /* * Store Version */ Drivers_array[2][Drivers_nrows] = CFStringCreateWithCString(NULL, (char *)drvattrs, kCFStringEncodingUTF8); } else goto nodriverver; } else if ((funcHdl = (pSQLGetInfoFunc)DLL_PROC(handle, "SQLGetInfoW")) != NULL) { /* Retrieve some informations */ ret = funcHdl (drv_hdbc, SQL_DRIVER_VER, drvattrs, sizeof(drvattrs), &len); if (ret == SQL_SUCCESS || ret == SQL_SUCCESS_WITH_INFO) { wchar_t *p = drvattrs; /* Find the description if one provided */ for (; *p ; p++) { if (*p == L' ') { *p++ = L'\0'; break; } } /* * Store Version */ Drivers_array[2][Drivers_nrows] = convert_wchar_to_CFString(drvattrs); } else goto nodriverver; } else goto nodriverver; } else { nodriverver: Drivers_array[2][Drivers_nrows] = CFStringCreateWithCString(NULL, "##.##", kCFStringEncodingUTF8); } if(drv_hdbc || drv_henv) { if(allocConnectHdl && (freeConnectHdl = (pSQLFreeConnect)DLL_PROC(handle, "SQLFreeConnect")) != NULL) { freeConnectHdl(drv_hdbc); drv_hdbc = NULL; } if(allocEnvHdl && (freeEnvHdl = (pSQLFreeEnv)DLL_PROC(handle, "SQLFreeEnv")) != NULL) { freeEnvHdl(drv_henv); drv_henv = NULL; } } if ((drv_hdbc || drv_henv) && (freeHdl = (pSQLFreeHandle)DLL_PROC(handle, "SQLFreeHandle")) != NULL) { if(drv_hdbc) freeHdl(SQL_HANDLE_DBC, drv_hdbc); if(drv_henv) freeHdl(SQL_HANDLE_ENV, drv_henv); } DLL_CLOSE(handle); /* Get the size and date of the driver */ if (!stat (_drv_u8, &_stat)) { CFStringRef strRef; struct tm drivertime; char buf[100]; Drivers_array[3][Drivers_nrows] = CFStringCreateWithFormat(NULL, NULL, strRef = CFStringCreateWithCString(NULL, "%d Kb", kCFStringEncodingUTF8), (int) (_stat.st_size / 1024)); CFRelease(strRef); localtime_r (&_stat.st_mtime, &drivertime); strftime (buf, sizeof (buf), "%c", &drivertime); Drivers_array[4][Drivers_nrows] = CFStringCreateWithCString(NULL, buf, kCFStringEncodingUTF8); } else { Drivers_array[3][Drivers_nrows] = CFStringCreateWithCString(NULL, "-", kCFStringEncodingUTF8); Drivers_array[4][Drivers_nrows] = CFStringCreateWithCString(NULL, "-", kCFStringEncodingUTF8); } for(i = 0 ; i < 5 ; i++) { GetThemeTextDimensions (Drivers_array[i][Drivers_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[i] < ioBound.h) colSize[i] = ioBound.h; } AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; Drivers_nrows++; /* Process next one */ skip: MEM_FREE (_drv_u8); _drv_u8 = NULL; ret = SQLDriversW (henv, SQL_FETCH_NEXT, drvdesc, sizeof (drvdesc)/sizeof(wchar_t), &len, drvattrs, sizeof (drvattrs)/sizeof(wchar_t), &len1); if (ret != SQL_SUCCESS && ret != SQL_SUCCESS_WITH_INFO && ret != SQL_NO_DATA) { _iodbcdm_nativeerrorbox (dlg, henv, SQL_NULL_HANDLE, SQL_NULL_HANDLE); goto error; } } error: /* Clean all that */ SQLFreeHandle (SQL_HANDLE_ENV, henv); end: ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBFILE_ID, colSize[1] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBVERSION_ID, colSize[2] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBSIZE_ID, colSize[3] + 20); SetDataBrowserTableViewNamedColumnWidth (widget, DBDATE_ID, colSize[4] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); }
int main(int argc, char* argv[]) { IBNibRef nibRef; OSStatus err; glob_t g; // check the correct BASS was loaded if (HIWORD(BASS_GetVersion())!=BASSVERSION) { Error("An incorrect version of BASS was loaded"); return 0; } // initialize default output device if (!BASS_Init(-1,44100,0,NULL,NULL)) { Error("Can't initialize device"); return 0; } // Create Window and stuff err = CreateNibReference(CFSTR("plugins"), &nibRef); if (err) return err; err = CreateWindowFromNib(nibRef, CFSTR("Window"), &win); if (err) return err; DisposeNibReference(nibRef); DataBrowserCallbacks dbc; dbc.version=kDataBrowserLatestCallbacks; InitDataBrowserCallbacks(&dbc); dbc.u.v1.itemDataCallback=MyDataBrowserItemDataCallback; ControlRef list=GetControl(20); SetDataBrowserCallbacks(list,&dbc); { // look for plugins (in the executable directory) char path[300]; DWORD l=sizeof(path); _NSGetExecutablePath(path,&l); strcpy(strrchr(path,'/')+1,"libbass*.dylib"); if (!glob(path,0,0,&g)) { int a; for (a=0;a<g.gl_pathc;a++) { if (BASS_PluginLoad(g.gl_pathv[a],0)) { // plugin loaded, add it to the list... char *p=strrchr(g.gl_pathv[a],'/')+1; AddDataBrowserItems(list,kDataBrowserNoItem,1,(DataBrowserItemID*)&p,kDataBrowserItemNoProperty); } } } DWORD c; GetDataBrowserItemCount(list,kDataBrowserNoItem,FALSE,kDataBrowserItemNoState,(DataBrowserItemState*)&c); if (!c) { // no plugins... static const char *noplugins="no plugins - visit the BASS webpage to get some"; AddDataBrowserItems(list,kDataBrowserNoItem,1,(DataBrowserItemID*)&noplugins,kDataBrowserItemNoProperty); } } SetupControlHandler(10,kEventControlHit,OpenEventHandler); SetControlAction(GetControl(12),NewControlActionUPP(PosEventHandler)); EventLoopTimerRef timer; InstallEventLoopTimer(GetCurrentEventLoop(),kEventDurationNoWait,kEventDurationSecond/2,NewEventLoopTimerUPP(TimerProc),0,&timer); ShowWindow(win); RunApplicationEventLoop(); globfree(&g); // "free" the output device and all plugins BASS_Free(); BASS_PluginFree(0); return 0; }
OSStatus wxMacDataBrowserControl::SetCallbacks(const DataBrowserCallbacks *callbacks) { return SetDataBrowserCallbacks( m_controlRef, callbacks ); }
bool loadInfoWin() { IBNibRef nibFile; OSStatus iResult; EventTypeSpec pEvent; g_lpfnGSIDProc = NewDataBrowserItemDataUPP(infoGSID); g_lpfnInfoProc = NewEventHandlerUPP(infoEvtHandler); if (noErr != (iResult = CreateNibReference(CFSTR("InfoWin"), &nibFile))) { DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); fprintf(stderr, "loadInfoWin() - CreateNibReference(InfoWin) failed, returning %lu!\n", (unsigned long) iResult); return false; } if (noErr != (iResult = CreateWindowFromNib(nibFile, CFSTR("FroggInfoWindow"), &g_refInfoWin))) { DisposeNibReference(nibFile); DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); fprintf(stderr, "loadInfoWin() - CreateWindowFromNib(FroggInfoWindow) failed, returning %lu!\n", (unsigned long) iResult); return false; } DisposeNibReference(nibFile); pEvent.eventClass = kEventClassWindow; pEvent.eventKind = kEventWindowClose; if (noErr != (iResult = InstallWindowEventHandler(g_refInfoWin, g_lpfnInfoProc, 1, &pEvent, NULL, &g_refInfoHdlr))) { DisposeWindow(g_refInfoWin); DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); fprintf(stderr, "loadInfoWin() - InstallWindowEventHandler() failed, returning %lu!\n", (unsigned long) iResult); return false; } DataBrowserCallbacks dbc; ControlRef cRef; ControlID cID; cID.signature = FOUR_CHAR_CODE('tags'); cID.id = 16; if (noErr != (iResult = GetControlByID(g_refInfoWin, &cID, &cRef))) { RemoveEventHandler(g_refInfoHdlr); DisposeWindow(g_refInfoWin); DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); fprintf(stderr, "loadInfoWin() - GetControlByID() failed, returning %lu!\n", (unsigned long) iResult); return false; } dbc.version = kDataBrowserLatestCallbacks; if (noErr != (iResult = InitDataBrowserCallbacks(&dbc))) { RemoveEventHandler(g_refInfoHdlr); DisposeWindow(g_refInfoWin); DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); fprintf(stderr, "loadInfoWin() - InitDataBrwoserCallbacks() failed, returning %lu!\n", (unsigned long) iResult); return false; } dbc.u.v1.itemDataCallback = g_lpfnGSIDProc; if (noErr != (iResult = SetDataBrowserCallbacks(cRef, &dbc))) { RemoveEventHandler(g_refInfoHdlr); DisposeWindow(g_refInfoWin); DisposeEventHandlerUPP(g_lpfnInfoProc); DisposeDataBrowserItemDataUPP(g_lpfnGSIDProc); fprintf(stderr, "loadInfoWin() - SetDataBrowserCallbacks() failed, returning %lu!\n", (unsigned long) iResult); return false; } g_bLoaded = true; return true; }
bool dialog_animation_settings_run(int animate_idx) { int i,pose_move_idx; ControlRef ctrl; ControlID ctrl_id; DataBrowserItemID itemID; DataBrowserCallbacks dbcall; DataBrowserItemDataUPP pose_list_item_upp,particle_list_item_upp,ring_list_item_upp; DataBrowserItemNotificationUPP pose_list_notify_upp,particle_list_notify_upp,ring_list_notify_upp; EventHandlerUPP event_upp,tab_event_upp; EventLoopTimerRef timer_event; EventLoopTimerUPP timer_upp; EventTypeSpec event_list[]={{kEventClassCommand,kEventProcessCommand}}, tab_event_list[]={{kEventClassCommand,kEventProcessCommand}, {kEventClassControl,kEventControlHit}}; // backup animation for cancel memmove(&animate_backup,&model.animates[animate_idx],sizeof(model_animate_type)); // if there is no pose moves or new animation, // then we need to add a default pose pose_move_idx=0; if (model.animates[animate_idx].npose_move==0) { pose_move_idx=model_animate_pose_insert(&model,animate_idx,-1,0); } // open the dialog dialog_open(&dialog_animation_settings_wind,"AnimationSettings"); // tab dialog_set_tab(dialog_animation_settings_wind,kAnimationPoseTab,0,0,kAnimationPoseTabCount); ctrl_id.signature=kAnimationPoseTab; ctrl_id.id=0; GetControlByID(dialog_animation_settings_wind,&ctrl_id,&ctrl); tab_event_upp=NewEventHandlerUPP(pose_move_setting_tab_proc); InstallControlEventHandler(ctrl,tab_event_upp,GetEventTypeCount(tab_event_list),tab_event_list,dialog_animation_settings_wind,NULL); // set pose list dialog_animate_idx=animate_idx; dialog_pose_move_idx=pose_move_idx; ctrl_id.signature=kAnimationPoseList; ctrl_id.id=0; GetControlByID(dialog_animation_settings_wind,&ctrl_id,&dialog_pose_move_list); dbcall.version=kDataBrowserLatestCallbacks; InitDataBrowserCallbacks(&dbcall); pose_list_item_upp=NewDataBrowserItemDataUPP(&pose_list_item_proc); dbcall.u.v1.itemDataCallback=pose_list_item_upp; pose_list_notify_upp=NewDataBrowserItemNotificationUPP(&pose_list_notify_proc); dbcall.u.v1.itemNotificationCallback=pose_list_notify_upp; SetDataBrowserCallbacks(dialog_pose_move_list,&dbcall); AddDataBrowserItems(dialog_pose_move_list,kDataBrowserNoItem,model.animates[dialog_animate_idx].npose_move,NULL,kDataBrowserItemNoProperty); dialog_pose_move_change_ok=FALSE; itemID=pose_move_idx+1; SetDataBrowserSelectedItems(dialog_pose_move_list,1,&itemID,kDataBrowserItemsAssign); dialog_pose_move_change_ok=TRUE; // setup particle list ctrl_id.signature=kAnimationParticleList; ctrl_id.id=0; GetControlByID(dialog_animation_settings_wind,&ctrl_id,&dialog_particle_list); dbcall.version=kDataBrowserLatestCallbacks; InitDataBrowserCallbacks(&dbcall); particle_list_item_upp=NewDataBrowserItemDataUPP(&particle_list_item_proc); dbcall.u.v1.itemDataCallback=particle_list_item_upp; particle_list_notify_upp=NewDataBrowserItemNotificationUPP(&particle_list_notify_proc); dbcall.u.v1.itemNotificationCallback=particle_list_notify_upp; SetDataBrowserCallbacks(dialog_particle_list,&dbcall); // setup ring list ctrl_id.signature=kAnimationRingList; ctrl_id.id=0; GetControlByID(dialog_animation_settings_wind,&ctrl_id,&dialog_ring_list); dbcall.version=kDataBrowserLatestCallbacks; InitDataBrowserCallbacks(&dbcall); ring_list_item_upp=NewDataBrowserItemDataUPP(&ring_list_item_proc); dbcall.u.v1.itemDataCallback=ring_list_item_upp; ring_list_notify_upp=NewDataBrowserItemNotificationUPP(&ring_list_notify_proc); dbcall.u.v1.itemNotificationCallback=ring_list_notify_upp; SetDataBrowserCallbacks(dialog_ring_list,&dbcall); // fill pose combo dialog_clear_combo(dialog_animation_settings_wind,kAnimationPosePose,0); for (i=0;i!=model.npose;i++) { dialog_add_combo_item(dialog_animation_settings_wind,kAnimationPosePose,0,model.poses[i].name,FOUR_CHAR_CODE('\?\?\?\?')); } // fill mesh combo (leave none in list) for (i=0;i!=model.nmesh;i++) { dialog_add_combo_item(dialog_animation_settings_wind,kAnimationMeshName,0,model.meshes[i].name,FOUR_CHAR_CODE('\?\?\?\?')); } // load setting data dialog_set_text(dialog_animation_settings_wind,kAnimationName,0,model.animates[animate_idx].name); dialog_set_boolean(dialog_animation_settings_wind,kAnimationLoop,0,model.animates[animate_idx].loop); dialog_set_focus(dialog_animation_settings_wind,kAnimationName,0); // load pose move data dialog_pose_move_settings_load(); dialog_animation_settings_cancel=FALSE; // show window ShowWindow(dialog_animation_settings_wind); // install event handler event_upp=NewEventHandlerUPP(animation_settings_event_proc); InstallWindowEventHandler(dialog_animation_settings_wind,event_upp,GetEventTypeCount(event_list),event_list,NULL,NULL); // modal window and timer timer_upp=NewEventLoopTimerUPP(pose_move_timer); InstallEventLoopTimer(GetCurrentEventLoop(),0,0.01,timer_upp,NULL,&timer_event); RunAppModalLoopForWindow(dialog_animation_settings_wind); RemoveEventLoopTimer(timer_event); DisposeEventLoopTimerUPP(timer_upp); // dialog to data dialog_get_text(dialog_animation_settings_wind,kAnimationName,0,model.animates[animate_idx].name,name_str_len); model.animates[animate_idx].loop=dialog_get_boolean(dialog_animation_settings_wind,kAnimationLoop,0); dialog_pose_move_settings_save(); // close window DisposeDataBrowserItemDataUPP(pose_list_item_upp); DisposeDataBrowserItemNotificationUPP(pose_list_notify_upp); DisposeDataBrowserItemDataUPP(particle_list_item_upp); DisposeDataBrowserItemNotificationUPP(particle_list_notify_upp); DisposeDataBrowserItemDataUPP(ring_list_item_upp); DisposeDataBrowserItemNotificationUPP(ring_list_notify_upp); DisposeWindow(dialog_animation_settings_wind); // if cancel, reset animation if (dialog_animation_settings_cancel) { memmove(&model.animates[animate_idx],&animate_backup,sizeof(model_animate_type)); } reset_animate_list(); return(!dialog_animation_settings_cancel); }
void addfdsns_to_list (TDSNCHOOSER *dsnchoose_t, char *path, Boolean b_reset) { DataBrowserItemID item = DBITEM_ID + 1; DataBrowserCallbacks dbCallbacks; ThemeDrawingState outState = NULL; UInt16 colSize[3] = { 400, 100, 150 }; SInt16 outBaseline; Point ioBound; int i; DIR *dir; char *path_buf; struct dirent *dir_entry; struct stat fstat; int b_added; ControlRef widget; WindowRef dlg; if (!dsnchoose_t || !path) return; widget = dsnchoose_t->fdsnlist; dlg = dsnchoose_t->mainwnd; GetThemeDrawingState (&outState); /* Install an event handler on the component databrowser */ dbCallbacks.version = kDataBrowserLatestCallbacks; InitDataBrowserCallbacks (&dbCallbacks); dbCallbacks.u.v1.itemNotificationCallback = NewDataBrowserItemNotificationUPP (fdsn_notification_item); /* On Mac OS X 10.0.x : clientDataCallback */ dbCallbacks.u.v1.itemDataCallback = NewDataBrowserItemDataUPP (fdsn_getset_item); SetDataBrowserCallbacks (widget, &dbCallbacks); /* Begin the draw of the data browser */ SetDataBrowserTarget (widget, DBITEM_ID); /* Make the clean up */ for (i = 0; i < FDSN_nrows; i++, item++) { CFRelease (FDSN_array[i]); FDSN_array[i] = NULL; FDSN_type[i] = 0; RemoveDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); } ActivateControl (widget); DrawOneControl (widget); /* Global Initialization */ FDSN_nrows = 0; item = DBITEM_ID + 1; if ((dir = opendir (path))) { while ((dir_entry = readdir (dir)) && FDSN_nrows < MAX_ROWS) { asprintf (&path_buf, "%s/%s", path, dir_entry->d_name); b_added = 0; if (stat ((LPCSTR) path_buf, &fstat) >= 0 && S_ISDIR (fstat.st_mode)) { if (dir_entry->d_name && dir_entry->d_name[0] != '.') { FDSN_array[FDSN_nrows] = CFStringCreateWithCString(NULL, dir_entry->d_name, kCFStringEncodingUTF8); FDSN_type[FDSN_nrows] = 0; b_added = 1; } } else if (stat ((LPCSTR) path_buf, &fstat) >= 0 && !S_ISDIR (fstat.st_mode) && strstr (dir_entry->d_name, ".dsn")) { FDSN_array[FDSN_nrows] = CFStringCreateWithCString(NULL, dir_entry->d_name, kCFStringEncodingUTF8); FDSN_type[FDSN_nrows] = 1; b_added = 1; } if (path_buf) free (path_buf); if (b_added) { GetThemeTextDimensions (FDSN_array[FDSN_nrows], kThemeSystemFont, kThemeStateActive, false, &ioBound, &outBaseline); if(colSize[0] < ioBound.h) colSize[0] = ioBound.h; AddDataBrowserItems (widget, DBITEM_ID, 1, &item, DBNAME_ID); item++; FDSN_nrows++; } } /* Close the directory entry */ closedir (dir); } else create_error (NULL, NULL, "Error during accessing directory information", strerror (errno)); ActivateControl (widget); /* Resize the columns to have a good look */ SetDataBrowserTableViewNamedColumnWidth (widget, DBNAME_ID, colSize[0] + 20); DrawOneControl (widget); /* Remove the DataBrowser callback */ SetDataBrowserCallbacks (NULL, &dbCallbacks); if(outState) DisposeThemeDrawingState (outState); if (b_reset) SetDataBrowserScrollPosition(widget, 0, 0); fill_dir_menu(dsnchoose_t, path); }