/*
 * Copyright (C) 2005-2006 Alfresco, Inc.
 *
 * Licensed under the Mozilla Public License version 1.1 
 * with a permitted attribution clause. You may obtain a
 * copy of the License at
 *
 *   http://www.alfresco.org/legal/license.txt
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific
 * language governing permissions and limitations under the
 * License.
 */

#include "stdafx.h"
#include "CAlfrescoApp.h"
#include "FileStatusDialog.h"

#include "util\Long.h"

// CFileStatusDialog dialog

IMPLEMENT_DYNAMIC(CFileStatusDialog, CDialog)
CFileStatusDialog::CFileStatusDialog(AlfrescoFileInfoList& fileList, CWnd* pParent /*=NULL*/)
	: CDialog(CFileStatusDialog::IDD, pParent),
	m_fileList( fileList)
{
}

CFileStatusDialog::~CFileStatusDialog()
{
}

void CFileStatusDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_FILELIST, m_listCtrl);
}


BEGIN_MESSAGE_MAP(CFileStatusDialog, CDialog)
END_MESSAGE_MAP()

/**
 * Initialize the dialog
 */
BOOL CFileStatusDialog::OnInitDialog() {

	// Call the base class

	CDialog::OnInitDialog();

	// Add headers to the list control

	m_listCtrl.InsertColumn( 0, L"Name", LVCFMT_LEFT, 200);
	m_listCtrl.InsertColumn( 1, L"Mime-type", LVCFMT_LEFT, 140);
	m_listCtrl.InsertColumn( 2, L"Size", LVCFMT_RIGHT, 80);
	m_listCtrl.InsertColumn( 3, L"Status", LVCFMT_LEFT, 100);
	m_listCtrl.InsertColumn( 4, L"Owner", LVCFMT_LEFT, 100);

	// Add the list view data

	for ( unsigned int i = 0; i < m_fileList.size(); i++) {

		// Get the current file information

		const AlfrescoFileInfo* pInfo = m_fileList.getInfoAt( i);

		// Add the item to the list view
		
		if ( pInfo != NULL) {

			// Insert a new item in the view

			int nIndex = m_listCtrl.InsertItem( 0, pInfo->getName());

			if ( pInfo->isType() == TypeFile) {

				// Display the mime-type and content length

				m_listCtrl.SetItemText( nIndex, 1, pInfo->getContentType());
				m_listCtrl.SetItemText( nIndex, 2, Long::toString( pInfo->getContentLength()));

				String status;
				String owner;

				if ( pInfo->isWorkingCopy()) {
					status = L"Work";
				}
				else if ( pInfo->getLockType() != LockNone) {
					status = L"Locked";
					owner  = pInfo->getLockOwner();
				}

				m_listCtrl.SetItemText( nIndex, 3, status);
				m_listCtrl.SetItemText( nIndex, 4, owner);
			}
		}
	}

	// Clear the file info list

	m_fileList.clear();

	return FALSE;
}

// CFileStatusDialog message handlers