Exemple #1
0
static void Directories_OnBrowse(HWND hDlg)
{
	int 	nType;
	int 	nItem;
	TCHAR	inbuf[MAX_PATH];
	TCHAR	outbuf[MAX_PATH];
	HWND	hList;

	hList = GetDlgItem(hDlg, IDC_DIR_LIST);
	nItem = ListView_GetNextItem(hList, -1, LVNI_SELECTED);

	if (nItem == -1)
		return;

	nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO));
	if (IsMultiDir(nType))
	{
		/* Last item is placeholder for append */
		if (nItem == ListView_GetItemCount(hList) - 1)
		{
			Directories_OnInsert(hDlg); 
			return;
		}
	}

	ListView_GetItemText(hList, nItem, 0, inbuf, MAX_PATH);

	if (BrowseForDirectory(hDlg, inbuf, outbuf) == TRUE)
	{
		nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO));
		DirInfo_SetDir(g_pDirInfo, nType, nItem, outbuf);
		UpdateDirectoryList(hDlg);
	}
}
Exemple #2
0
static BOOL Directories_OnBeginLabelEdit(HWND hDlg, NMHDR* pNMHDR)
{
	int 		  nType;
	BOOL		  bResult = FALSE;
	NMLVDISPINFO* pDispInfo = (NMLVDISPINFO*)pNMHDR;
	LVITEM* 	  pItem = &pDispInfo->item;

	nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO));
	if (IsMultiDir(nType))
	{
		/* Last item is placeholder for append */
		if (pItem->iItem == ListView_GetItemCount(GetDlgItem(hDlg, IDC_DIR_LIST)) - 1)
		{
			HWND hEdit;

			if (MAX_DIRS <= DirInfo_NumDir(g_pDirInfo, nType))
				return TRUE; /* don't edit */

			hEdit = (HWND)(LRESULT)(int)SendDlgItemMessage(hDlg, IDC_DIR_LIST, LVM_GETEDITCONTROL, 0, 0);
			Edit_SetText(hEdit, TEXT(""));
		}
	}

	return bResult;
}
Exemple #3
0
static void Directories_OnDelete(HWND hDlg)
{
	int 	nType;
	int 	nCount;
	int 	nSelect;
	int 	i;
	int 	nItem;
	HWND	hList = GetDlgItem(hDlg, IDC_DIR_LIST);

	nItem = ListView_GetNextItem(hList, -1, LVNI_SELECTED | LVNI_ALL);

	if (nItem == -1)
		return;

	/* Don't delete "Append" placeholder. */
	if (nItem == ListView_GetItemCount(hList) - 1)
		return;

	nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO));
	if (IsMultiDir(nType))
	{
		for (i = nItem; i < DirInfo_NumDir(g_pDirInfo, nType) - 1; i++)
			_tcscpy(DirInfo_Path(g_pDirInfo, nType, i),
				   DirInfo_Path(g_pDirInfo, nType, i + 1));

		_tcscpy(DirInfo_Path(g_pDirInfo, nType, DirInfo_NumDir(g_pDirInfo, nType) - 1), TEXT(""));
		DirInfo_NumDir(g_pDirInfo, nType)--;

		DirInfo_SetModified(g_pDirInfo, nType, TRUE);
	}

	UpdateDirectoryList(hDlg);
	

	nCount = ListView_GetItemCount(hList);
	if (nCount <= 1)
		return;

	/* If the last item was removed, select the item above. */
	if (nItem == nCount - 1)
		nSelect = nCount - 2;
	else
		nSelect = nItem;

	ListView_SetItemState(hList, nSelect, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
}
Exemple #4
0
static void Directories_OnSelChange(HWND hDlg)
{
    UpdateDirectoryList(hDlg);

    HWND hCombo = GetDlgItem(hDlg, IDC_DIR_COMBO);
    int nType = ComboBox_GetCurSel(hCombo);
    if (IsMultiDir(nType))
    {
        EnableWindow(GetDlgItem(hDlg, IDC_DIR_DELETE), TRUE);
        EnableWindow(GetDlgItem(hDlg, IDC_DIR_INSERT), TRUE);
    }
    else
    {
        EnableWindow(GetDlgItem(hDlg, IDC_DIR_DELETE), FALSE);
        EnableWindow(GetDlgItem(hDlg, IDC_DIR_INSERT), FALSE);
    }
}
Exemple #5
0
static void UpdateDirectoryList(HWND hDlg)
{
    bool b_res = 0;
    int i = 0;
    int nType = 0;
    LV_ITEM Item;
    HWND hList  = GetDlgItem(hDlg, IDC_DIR_LIST);
    HWND hCombo = GetDlgItem(hDlg, IDC_DIR_COMBO);

    /* Remove previous */
    b_res = ListView_DeleteAllItems(hList);

    /* Update list */
    memset(&Item, 0, sizeof(LV_ITEM));
    Item.mask = LVIF_TEXT;

    nType = ComboBox_GetCurSel(hCombo);
    if (IsMultiDir(nType))
    {
        Item.pszText = (TCHAR*) TEXT(DIRLIST_NEWENTRYTEXT); // puts the < > empty entry in
        (void)ListView_InsertItem(hList, &Item);
        int t = DirInfo_NumDir(g_pDirInfo, nType);
        // directories are inserted in reverse order
        for (i = t; 0 < i; i--)
        {
            Item.pszText = DirInfo_Path(g_pDirInfo, nType, i-1);
            (void)ListView_InsertItem(hList, &Item);
        }
    }
    else
    {
        Item.pszText = DirInfo_Dir(g_pDirInfo, nType);
        (void)ListView_InsertItem(hList, &Item);
    }

    /* select first one */

    ListView_SetItemState(hList, 0, LVIS_SELECTED, LVIS_SELECTED);
    b_res++;
}
Exemple #6
0
static void UpdateDirectoryList(HWND hDlg)
{
	int 	i;
	int 	nType;
	LV_ITEM Item;
	HWND	hList  = GetDlgItem(hDlg, IDC_DIR_LIST);
	HWND	hCombo = GetDlgItem(hDlg, IDC_DIR_COMBO);
	BOOL	b_res;

	/* Remove previous */

	b_res = ListView_DeleteAllItems(hList);

	/* Update list */

	memset(&Item, 0, sizeof(LV_ITEM));
	Item.mask = LVIF_TEXT;

	nType = ComboBox_GetCurSel(hCombo);
	if (IsMultiDir(nType))
	{
		Item.pszText = (TCHAR*) TEXT(DIRLIST_NEWENTRYTEXT);
		(void)ListView_InsertItem(hList, &Item);
		for (i = DirInfo_NumDir(g_pDirInfo, nType) - 1; 0 <= i; i--)
		{
			Item.pszText = DirInfo_Path(g_pDirInfo, nType, i);
			(void)ListView_InsertItem(hList, &Item);
		}
	}
	else
	{
		Item.pszText = DirInfo_Dir(g_pDirInfo, nType);
		(void)ListView_InsertItem(hList, &Item);
	}

	/* select first one */

	ListView_SetItemState(hList, 0, LVIS_SELECTED, LVIS_SELECTED);
}
Exemple #7
0
static void DirInfo_SetDir(tDirInfo *pInfo, int nType, int nItem, LPCTSTR pText)
{
	TCHAR *t_s;
	TCHAR *t_pOldText;

	if (IsMultiDir(nType))
	{
		assert(nItem >= 0);
		_tcscpy(DirInfo_Path(pInfo, nType, nItem), pText);
		DirInfo_SetModified(pInfo, nType, TRUE);
	}
	else
	{
		t_s = win_tstring_strdup(pText);
		if (!t_s)
			return;
		t_pOldText = pInfo[nType].m_tDirectory;
		if (t_pOldText)
			osd_free(t_pOldText);
		pInfo[nType].m_tDirectory = t_s;
	}
}
Exemple #8
0
static void Directories_OnInsert(HWND hDlg)
{
	int 	nItem;
	TCHAR	buf[MAX_PATH];
	HWND	hList;

	hList = GetDlgItem(hDlg, IDC_DIR_LIST);
	nItem = ListView_GetNextItem(hList, -1, LVNI_SELECTED);

	if (BrowseForDirectory(hDlg, NULL, buf) == TRUE)
	{
		int 	i;
		int 	nType;

		/* list was empty */
		if (nItem == -1)
			nItem = 0;

		nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO));
		if (IsMultiDir(nType))
		{
			if (MAX_DIRS <= DirInfo_NumDir(g_pDirInfo, nType))
				return;

			for (i = DirInfo_NumDir(g_pDirInfo, nType); nItem < i; i--)
				_tcscpy(DirInfo_Path(g_pDirInfo, nType, i),
					   DirInfo_Path(g_pDirInfo, nType, i - 1));

			_tcscpy(DirInfo_Path(g_pDirInfo, nType, nItem), buf);
			DirInfo_NumDir(g_pDirInfo, nType)++;
			DirInfo_SetModified(g_pDirInfo, nType, TRUE);
		}

		UpdateDirectoryList(hDlg);

		ListView_SetItemState(hList, nItem, LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);
	}
}
Exemple #9
0
static void Directories_OnOk(HWND hDlg)
{
    int i = 0;
    int nResult = 0;
    LPTSTR s;
    char* utf8_s;

    for (i = 0; g_directoryInfo[i].lpName; i++)
    {
        if (IsMultiDir(i))
        {
            nResult |= RetrieveDirList(i, g_directoryInfo[i].nDirDlgFlags, g_directoryInfo[i].pfnSetTheseDirs);
        }
        else
        {
            s = FixSlash(DirInfo_Dir(g_pDirInfo, i));
            utf8_s = utf8_from_tstring(s);
            g_directoryInfo[i].pfnSetTheseDirs(utf8_s);
            osd_free(utf8_s);
        }
    }
    EndDialog(hDlg, nResult);
}
Exemple #10
0
static BOOL Directories_OnEndLabelEdit(HWND hDlg, NMHDR* pNMHDR)
{
	BOOL		  bResult = FALSE;
	NMLVDISPINFO* pDispInfo = (NMLVDISPINFO*)pNMHDR;
	LVITEM* 	  pItem = &pDispInfo->item;

	if (pItem->pszText != NULL)
	{
		struct _stat file_stat;

		/* Don't allow empty entries. */
		if (!_tcscmp(pItem->pszText, TEXT("")))
		{
			return FALSE;
		}

		/* Check validity of edited directory. */
		if (_tstat(pItem->pszText, &file_stat) == 0
		&&	(file_stat.st_mode & S_IFDIR))
		{
			bResult = TRUE;
		}
		else
		{
			if (MessageBox(NULL, TEXT("Directory does not exist, continue anyway?"), TEXT(MAMEUINAME), MB_OKCANCEL) == IDOK)
				bResult = TRUE;
		}
	}

	if (bResult == TRUE)
	{
		int nType;
		int i;

		nType = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO));
		if (IsMultiDir(nType))
		{
			/* Last item is placeholder for append */
			if (pItem->iItem == ListView_GetItemCount(GetDlgItem(hDlg, IDC_DIR_LIST)) - 1)
			{
				if (MAX_DIRS <= DirInfo_NumDir(g_pDirInfo, nType))
					return FALSE;

				for (i = DirInfo_NumDir(g_pDirInfo, nType); pItem->iItem < i; i--)
					_tcscpy(DirInfo_Path(g_pDirInfo, nType, i),
						   DirInfo_Path(g_pDirInfo, nType, i - 1));

				_tcscpy(DirInfo_Path(g_pDirInfo, nType, pItem->iItem), pItem->pszText);

				DirInfo_SetModified(g_pDirInfo, nType, TRUE);
				DirInfo_NumDir(g_pDirInfo, nType)++;
			}
			else
				DirInfo_SetDir(g_pDirInfo, nType, pItem->iItem, pItem->pszText);
		}
		else
		{
			DirInfo_SetDir(g_pDirInfo, nType, pItem->iItem, pItem->pszText);
		}

		UpdateDirectoryList(hDlg);
		ListView_SetItemState(GetDlgItem(hDlg, IDC_DIR_LIST), pItem->iItem,
							  LVIS_FOCUSED | LVIS_SELECTED, LVIS_FOCUSED | LVIS_SELECTED);

	}

	return bResult;
}
Exemple #11
0
static BOOL DirInfo_Modified(tDirInfo *pInfo, int nType)
{
	assert(IsMultiDir(nType));
	return pInfo[nType].m_Path->m_bModified;
}
Exemple #12
0
static void DirInfo_SetModified(tDirInfo *pInfo, int nType, BOOL bModified)
{
	assert(IsMultiDir(nType));
	pInfo[nType].m_Path->m_bModified = bModified;
}
Exemple #13
0
static TCHAR* DirInfo_Dir(tDirInfo *pInfo, int nType)
{
	assert(!IsMultiDir(nType));
	return pInfo[nType].m_tDirectory;
}
Exemple #14
0
static BOOL Directories_OnInitDialog(HWND hDlg, HWND hwndFocus, LPARAM lParam)
{
    RECT rectClient;
    LVCOLUMN LVCol;
    int i = 0;
    int nDirInfoCount = 0;
    LPCSTR s;
    TCHAR *token;
    TCHAR buf[MAX_PATH * MAX_DIRS];
    TCHAR* t_s = NULL;
    HRESULT res = 0;

    /* count how many dirinfos there are */
    nDirInfoCount = 0;
    while(g_directoryInfo[nDirInfoCount].lpName)
        nDirInfoCount++;

    g_pDirInfo = (tDirInfo *) malloc(sizeof(tDirInfo) * nDirInfoCount);
    if (!g_pDirInfo) /* bummer */
        goto error;
    memset(g_pDirInfo, 0, sizeof(tDirInfo) * nDirInfoCount);

    for (i = nDirInfoCount - 1; i >= 0; i--)
    {
        t_s = tstring_from_utf8(g_directoryInfo[i].lpName);
        if( !t_s )
            return FALSE;
        (void)ComboBox_InsertString(GetDlgItem(hDlg, IDC_DIR_COMBO), 0, win_tstring_strdup(t_s));
        osd_free(t_s);
        t_s = NULL;
    }

    (void)ComboBox_SetCurSel(GetDlgItem(hDlg, IDC_DIR_COMBO), 0);

    GetClientRect(GetDlgItem(hDlg, IDC_DIR_LIST), &rectClient);

    memset(&LVCol, 0, sizeof(LVCOLUMN));
    LVCol.mask = LVCF_WIDTH;
    LVCol.cx = rectClient.right - rectClient.left - GetSystemMetrics(SM_CXHSCROLL);

    res = ListView_InsertColumn(GetDlgItem(hDlg, IDC_DIR_LIST), 0, &LVCol);
    res++;

    /* Keep a temporary copy of the directory strings in g_pDirInfo. */
    for (i = 0; i < nDirInfoCount; i++)
    {
        s = g_directoryInfo[i].pfnGetTheseDirs();
        t_s = tstring_from_utf8(s);
        if( !t_s )
            return FALSE;
        if (IsMultiDir(i))
        {
            /* Copy the string to our own buffer so that we can mutilate it */
            _tcscpy(buf, t_s);

            g_pDirInfo[i].m_Path = (tPath*)malloc(sizeof(tPath));
            if (!g_pDirInfo[i].m_Path)
                goto error;

            g_pDirInfo[i].m_Path->m_NumDirectories = 0;
            token = _tcstok(buf, TEXT(";"));
            while ((DirInfo_NumDir(g_pDirInfo, i) < MAX_DIRS) && token)
            {
                _tcscpy(DirInfo_Path(g_pDirInfo, i, DirInfo_NumDir(g_pDirInfo, i)), token);
                DirInfo_NumDir(g_pDirInfo, i)++;
                token = _tcstok(NULL, TEXT(";"));
            }
            DirInfo_SetModified(g_pDirInfo, i, FALSE);
        }
        else
        {
            DirInfo_SetDir(g_pDirInfo, i, -1, t_s);
        }
        osd_free(t_s);
        t_s = NULL;
    }

    UpdateDirectoryList(hDlg);
    return TRUE;

error:
    if( t_s )
        osd_free(t_s);
    Directories_OnDestroy(hDlg);
    EndDialog(hDlg, -1);
    return FALSE;
}