text:
Avant-garde photographer Deborah Turbeville launched her first fashion retrospective photo book "The Fashion Pictures", published by Rizzoli, last month, October 2011. The book reveals her visionary aesthetic and the stories behind her poetic, highly stylized photographs. The selection made by the artist herself includes the controversial Bathhouse series of 1975 for American Vogue, the Woman in the Woods series of 1977 for Italian Vogue, along with advertising campaigns for labels like Valentino, Chanel, Ungaro, Sonia Rykiel, Yamamoto and Commes des Garçons, as well as never been seen before images.
Born in Massachusetts and raised in New England, Deborah worked in her early twenties as a model then fashion editor in New York but she found out soon enough that her heart was in photography. She made her way into the fashion photography world with a portfolio for Saks Fifth Avenue that appeared in Vogue in the 1970's. Since then, Deborah Turbeville has been putting her mark on fashion photography, shaping it into a polished form of art.
As for inspiration sources, the book mentions various art works, literature pieces, and architecture from the past: "from the great silent-films by Eisenstein, Vertov, and Murnau and the later cinematic work of Cocteau, Visconti, Fassbinder, and Bertulucci to Diaghelev's ballet set drawings, Russian literature, and the faded palaces of Europe."
DT's fashion pictures combine different techniques (mixed media) or make use of simple day light but they all have an eerie quality, the ambiguity of a narrative frozen in time. Interesting characters with distinct faces, strange places (decayed ballrooms or grown out gardens) and high fashion clothes make the formula of her sophisticated, intellectual approach. All her fashion images are stirring due to the psychological tension that pours out only showing the artist's obsession with cinematic style and atmosphere. Isolated, pensive figures in non-posing arrangements add more to that feeling. Most recent works include a fashion series for Grey Magazine, winter 2011-2012, a start-up for new artists and designers, and the Valentino Couture lookbook published in Vogue Italia, september 2011.
photo credit @ The Fashion Spot, Staley Wise
Coats&Jackets by Camilla Wellton
Silk scarves from Antagoniste
Vogue USA
avantgarde fashion
photography book
Submitted by hautfashion on Thu, 11/14/2019 - 02:53
Magdalena Frackowiak for Vogue Paris April 2012
Tim Walker, fashion's story teller
Erwin Olaf, the shocking factor in fashion imagery
Alexander Wang wins CFDA/Vogue Fashion Fund Award
Erik Madigan Heck, the romantic conceptualist of fashion
The new face for fashion androgyny
Hair, Make up and Fashion
For W, fashion is art and commerce
High Fashion by Karl Lagerfeld
Valentino Spring/Summer 2020 collection at Paris Fashion Week
Resort 2012 fashion trend: scarves and handkerchiefs


AMC Networks shares lost 29.9% of their value last year — but due to a quirk in the way it had to report compensation you wouldn't know that from the package for CEO Josh Sapan. The proxy statement it just filed at the SEC shows him with $30.5 million, up 72.4%.
Much of the increase is due to a shift in AMC's pay strategy to offer performance stock units as opposed to cash. That boosted the tally because the SEC requires companies to report the cash awards in the year that they're earned while grants have to be listed in the year they're made.
As a result, the 2016 proxy "includes both the cash-based long-term performance awards granted in 2014 and earned for the period of 2014-2016, and the PSU awards granted for 2016 (with payment based upon the performance period 2016-2018)," the company says.
Sapan's total includes $2 million salary, $13.2 million in stock awards, $15.1 million in non equity incentives, and $173,862 for other compensation.
The annual meeting will take place on June 6 in New York. It will probably be uneventful: Charles and James Dolan's families control 67.8% of the voting shares.


24", 36", 42", 44", 50", 54", 60" rolls etc.
IMATEC latex polyester canvas is excusively produced for latex ink. IM260L is glossy surface with waterproof inkjet coatinf, especially suitable for Latex ink to creat the brilliant print results. This kind of canvas has super fabric texture, wide color gamut, anti-cracking, stretchable, anti-fade. Matte surface finish is also supplied.
Supermarket, shopping mall, restaurants, churches, galleries, museums etc.
চীন ভাল গুণ ইঙ্কজেট কটন ক্যানভাস সরবরাহকারী. Copyright © 2016 - 2019 inkjetprintmedia.com. All Rights Reserved.


text:
Дод Проктер, урожд. Дорис Маргарет Шоу (, , 21 апреля 1890, Хэмпстед, Лондон — 31 июля 1972, Редрут, Корнуолл) — английская художница, представительница Ньюлинской школы живописи, супруга художника Эрнеста Проктера.

Жизнь и творчество
Родилась в Лондоне, в зажиточной семье. В возрасте 15 лет приезжает с матерью и братом в Ньюлин в Корнуолле, и поступает в школу живописи Стэнфорда Форбса. Здесь уже училась двоюродная сестра Дорис, Сесиль Джесс. Дод и её будущий супруг вместе посещали художественные школы в Англии и во Франции, в Ньюлине и в Париже. Здесь же Дорис знакомится со своим будущим мужем, Эрнестом. В 1910-1911 годах они оба продолжают обучение в Париже, в академии Коларосси. Во Франции супруги увлекаются импрессионизмом и постимпрессионизмом, большое влияние на их творчество оказали работы О.Ренуара и П.Сезанна. В 1912 году Эрнест и Дорис вступают в брак, венчание проходит в парижской церкви Сен-Винсент-де-Поль. С началом
Первой мировой войны Э.Проктер работает в военном госпитале в Дюнкерке, Дорис с маленьким сыном живёт в Париже вплоть до 1918 года. С возвращением в Англию супруги живут и работают в Ньюлине. В 1919-1920 годах они работают над декоративным оформлением дворца Кокейн в Рангуне.  Дод, начиная с 1922 года, создаёт серии рисунков, изображающих молодых женщин. Широкая известность к ней приходит в 1927 году, когда на конкурсе, проводимом газетой Дейли Мейл полотно её «Утро» читательским голосованием было признано картиной года и приобретено галереей Тейт за 300 фунтов стерлингов.

После смерти мужа в 1935 году Дод Проктер продолжает рисовать. Это преимущественно портреты и натюрморты, изображения цветов. Занималась также книжным иллюстрированием. Художница много путешествует, посещает США, Канаду, Ямайку и Африку. В 1942 году она избирается членом британской Королевской академии, в 1966 - президентом Общества художников Сент-Ив (STISA). Скончалась в 1972 году в Корнуолле, похоронена рядом с мужем.

Литература
 Cross, Tom (1996) Shining Sands: Artists in Newlyn and St Ives 1880-1930 Lutterworth Press. ISBN 0-7188-2925-5
 King, Averil (2005) Newlyn Flowers: The Floral Art of Dod Procter Philip Wilson. 978-0856676048
 James, Alison (2008) A Singular Vision: Dod Procter Sansom & Co. 9781904537786

Дополнения
Работы Дод Проктер в галерее Тейт
BBC Работы Дод Проктер в частных британских коллекциях
Национальная портретная галерея

Примечания

Художницы Великобритании XX века
Члены Королевской академии художеств

redpajama_set_name: RedPajamaWikipedia


Contradicting the popular sentiment that Congress has done nothing to amend firearm policy in response to recent mass shootings, a political action has been taken utilizing a novel semantic approach to the problem.
In the last year, both Democrats and Republicans proposed four bills regulating gun ownership or purchase. All four failed, because much like telephone usage in rural areas, the gun debate tends to fall along party lines.
Luckily this new bill, likely due to its logical nature, has made it to the president's desk.
The new bill proposes to change the definition of the phrase "mass shooting." It passed through Congress earlier in the week in response to the veto of the bill that defined "mass shooting" as 15 people or more, as the number of national mass shootings was still too high.
The new definition of "mass shootings" under this bill will be "something that happens not very often but as often as statistics says it should so it is believable." Unsurprisingly the number of mass shootings on US soil is expected to decrease to its lowest levels since the Civil War.
While there have been critics of the bill, Congress-sympathizers say that members of the House and Senate are clearly well-educated and intelligent people since they possess the intellectual confidence to propose novel ideas like this.
At this time, this bill and the previously mentioned vetoed bill are the only pieces of gun legislation to pass through America's divided Congress. This is a clear sign that a practical action-based approach to the problem (rather than the semantic approach) is a blithering waste of time.


text:
En la llegenda artúrica, el seient perillós és un seient vacant a la Taula Rodona que Merlí ha reservat pel cavaller que serà digne d'assolir l'èxit en la recerca del Sant Greal. En canvi, tot aquell qui s'hi asseurà sense ser prou pur, serà empassat cap a les profunditats de la terra.

En les narracions primerenques, el seient i el Greal eren un afer relacionat amb Perceval; se'n parla, per exemple, en el Didot Perceval, de Robert de Boron, on és aquest heroi el qui ocupa el seient a la cort d'Artús a Carduel. Amb la Vulgata artúrica, però, l'afer es va anar transferint cap un nou heroi: Galaaz, fill de Lancelot. Al Morte Darthur de Thomas Malory, en una descripció basada en la Queste del Sant Graal, Galaaz arriba a Camelot el dia de Pentecosta 454 anys després de la mort de Jesús, i s'asseu al seient sense adonar-se'n però sense conseqüències fatals, el que el designa com a probable trobador del Greal. El seient també té protagonisme en els Idil·lis del rei, obra d'Alfred Tennyson.

Segons certs estudiosos, el motiu del seient perillós es pot seguir fins a la mitologia gal·lesa, còrnica i bretona, d'on deriva la major part de la llegenda artúrica. Segons aquesta teoria, el seient perillós era una versió mig recordada d'un ritual celta que té un paral·lelisme amb al ritual irlandès de Lia Fáil (la pedra del destí).

Referències

Enllaços externs

Objectes mitològics
Matèria de Bretanya


Here's everything you need to know about deliveries for SIM free and pay as you go mobile phone products.
For more help, please see our pay as you go mobile phone products FAQ.
We offer free next-day home delivery on pay as you go phones, pay as you go SIMs and SIM free phones.
If you are not in when we deliver, we will try to leave the order with a neighbour or in a secure place and drop a card through the door to let you know where we've left it. If we can't leave your order in a secure place or with a neighbour, we will leave a card at your address. Please follow the instructions on the card to re-arrange delivery.
We will let you know what's happening with your order by email and on the website. To find out the latest status of your order online log on to Account and go to "Your Order".
If your delivery is due today and it's late, please double-check the delivery date on your confirmation email, and also make sure we haven't sent you any email or text updates.
Our customer services team are always here to help, but they won't have more specific order arrival times than you'll find online.
We will let you know if anything changes with your order via email, text or phone. So it's really important that your contact details are up to date on your Tesco account.
Unfortunately, delays can happen which are often beyond our control. If this means your order cannot be delivered on the confirmed delivery date, we will let you know as soon as we know of any delay. Please check the confirmed delivery date on your order confirmation and ensure you have not received any further emails or text messages from us with updates on the progress of your order.
I have not had my order but the tracking says it has been delivered?
Is it possible that a relative or neighbour has signed for your delivery?
If you think there's been a problem, please just get in touch with our customer services team on the relevant phone number or email address on the Contact us page.
You can place an order from outside the UK, but the order must be delivered to a delivery address within England, Scotland, Wales, Northern Ireland or the Isle of Man.
Tesco will certainly deliver to business addresses. However, our products are for personal use only and we are not responsible for any loss a business may encounter having used them. Please see our terms and conditions page.
Your delivery address may not have a fully registered Royal Mail postcode. This could happen if you live in a newly built house or flat. You need to contact Royal Mail if this is the case.
If you have further questions about this, please contact our customer services on 0800 323 4050 (or 0330 123 4050 charged at local rate from a mobile.
Please note, by placing an order you are authorising us to accept signature from another person on your behalf, in case you're not in when a delivery that requires a signature is delivered. If required, anyone in the household over the age of 18 can sign for deliveries from Tesco.
We may leave a product in a safe place if no one is present at the time of delivery. In these circumstances we will put a card through your letterbox explaining where we have left the product.


text:
// ClientListCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "p4win.h"
#include "ClientListCtrl.h"
#include "ClientWizSheet.h"
#include "MainFrm.h"
#include "cmd_editspec.h"
#include "cmd_delete.h"
#include "cmd_describe.h"
#include "cmd_diff2.h"
#include "cmd_clients.h"
#include "cmd_get.h"
#include "cmd_changes.h"
#include "newclientdlg.h"
#include "TemplateNameDlg.h"
#include "Diff2ObjsDlg.h"
#include "ClientFilterDlg.h"
#include "MsgBox.h"
#include "ImageList.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define IMG_INDEX(x) (x-IDB_PERFORCE)

static LPCTSTR sRegValue_ClientList = _T("Client List");

enum ClientSubItems
{
	CLIENT_NAME,
	CLIENT_OWNER,
	CLIENT_HOST,
	CLIENT_ACCESSDATE,
	CLIENT_ROOT,
	CLIENT_DESC,
	CLIENT_MAXCOL
};

/////////////////////////////////////////////////////////////////////////////
// CClientListCtrl

IMPLEMENT_DYNCREATE(CClientListCtrl, CP4ListCtrl)

BEGIN_MESSAGE_MAP(CClientListCtrl, CP4ListCtrl)
	ON_COMMAND(ID_CLIENT_DELETE, OnClientDelete)
	ON_UPDATE_COMMAND_UI(ID_CLIENT_DELETE, OnUpdateClientDelete)
	ON_UPDATE_COMMAND_UI(ID_VIEW_UPDATE_RIGHT, OnUpdateViewUpdate)
	ON_WM_CONTEXTMENU()
	ON_COMMAND(ID_CLIENT_TEMPLATE, OnClientTemplate)
	ON_UPDATE_COMMAND_UI(ID_CLIENT_TEMPLATE, OnUpdateClientTemplate)
	ON_COMMAND(ID_CLIENT_USEASLOCALTEMPLATE, OnUseAsLocalTemplate)
	ON_UPDATE_COMMAND_UI(ID_CLIENT_USEASLOCALTEMPLATE, OnUpdateUseAsLocalTemplate)
	ON_COMMAND(ID_CLIENT_CLEARLOCALTEMPLATE, OnClearLocalTemplate)
	ON_UPDATE_COMMAND_UI(ID_CLIENT_CLEARLOCALTEMPLATE, OnUpdateClearLocalTemplate)
	ON_UPDATE_COMMAND_UI(ID_CLIENT_DESCRIBE, OnUpdateClientDescribe)
	ON_COMMAND(ID_CLIENT_DESCRIBE, OnDescribe)
	ON_WM_LBUTTONDBLCLK()
	ON_COMMAND(ID_CLIENTSPEC_SWITCH, OnClientspecSwitch)
	ON_UPDATE_COMMAND_UI(ID_CLIENTSPEC_SWITCH, OnUpdateClientspecSwitch)
	ON_COMMAND(ID_SETDEFCLIENT, OnSetDefClient)
	ON_UPDATE_COMMAND_UI(ID_SETDEFCLIENT, OnUpdateSetDefClient)
	ON_COMMAND(ID_VIEW_UPDATE_RIGHT, OnViewUpdate)
	ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick)
	ON_NOTIFY_REFLECT(LVN_DELETEITEM, OnDeleteitem)
	ON_COMMAND(ID_CLIENTSPEC_NEW, OnClientspecNew)
	ON_UPDATE_COMMAND_UI(ID_CLIENTSPEC_NEW, OnUpdateClientspecNew)
	ON_WM_CREATE()
	ON_UPDATE_COMMAND_UI(ID_ADD_TOVIEW, OnUpdateAddToClientView)
	ON_COMMAND(ID_ADD_TOVIEW, OnAddToClientView)
	ON_COMMAND(ID_PERFORCE_OPTIONS, OnPerforceOptions)
	ON_UPDATE_COMMAND_UI(ID_FILE_DIFF2, OnUpdateDiff2Clients)
	ON_COMMAND(ID_FILE_DIFF2, OnDiff2Clients)
	ON_UPDATE_COMMAND_UI(ID_FILTERCLIENTS, OnUpdateFilterClients)
	ON_COMMAND(ID_FILTERCLIENTS, OnFilterClients)
	ON_UPDATE_COMMAND_UI(ID_CLEARCLIENTFILTER, OnUpdateClearClientFilter)
	ON_COMMAND(ID_CLEARCLIENTFILTER, OnClearClientFilter)
	ON_MESSAGE(WM_P4CLIENTS, OnP4ClientList )
	ON_MESSAGE(WM_P4EDITSPEC, OnP4ClientSpec )
	ON_MESSAGE(WM_P4ENDSPECEDIT, OnP4EndSpecEdit )
	ON_MESSAGE(WM_P4DELETE, OnP4Delete )
	ON_MESSAGE(WM_P4DESCRIBE, OnP4Describe )
    ON_MESSAGE(WM_P4ENDDESCRIBE, OnP4EndDescribe )
	ON_MESSAGE(WM_P4GET, OnP4Sync )
	ON_MESSAGE(WM_NEWUSER, NewUser )
	ON_MESSAGE(WM_P4DESCRIBEALT, OnP4UseAsLocalTemplate )
END_MESSAGE_MAP()

CClientListCtrl::CClientListCtrl()
{
	m_SortAscending=TRUE;
	m_LastSortCol=0;
	m_OldClient = GET_P4REGPTR()->GetP4Client();
	m_ClientNew.Empty();
	m_NewClicked = m_NewClient = FALSE;
	m_viewType = P4CLIENT_SPEC;
	m_OldDefClient = m_OldCurClient = _T("@");
	m_PrevNbrCli = -1;

	m_CF_DEPOT = RegisterClipboardFormat(LoadStringResource(IDS_DRAGFROMDEPOT));
	m_CF_CLIENT= RegisterClipboardFormat(LoadStringResource(IDS_DRAGFROMCLIENT));
	m_caption =  m_captionplain = LoadStringResource(IDS_PERFORCE_CLIENTS);
}

CClientListCtrl::~CClientListCtrl()
{
}

/////////////////////////////////////////////////////////////////////////////
// CClientListCtrl diagnostics

#ifdef _DEBUG
void CClientListCtrl::AssertValid() const
{
	CP4ListCtrl::AssertValid();
}

void CClientListCtrl::Dump(CDumpContext& dc) const
{
	CP4ListCtrl::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CClientListCtrl message handlers

/*
	_________________________________________________________________

	let user edit the client spec s/he clicked on.
	_________________________________________________________________
*/

void CClientListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
	int index = GetHitItem ( point );
	if(index > -1)
	{
		SetItemState( index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED );
		OnDescribe( );
	}
	else
		CP4ListCtrl::OnLButtonDblClk(nFlags, point);
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult)
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	delete (CP4Client *) GetItemData(pNMListView->iItem);

	*pResult = 0;
}

/*
	_________________________________________________________________

	define a new client, which means
		set the current client to this new one (true? maybe i should ask the user)
		sometimes change the registry
		edit this new client's spec

	this used to be done in the options dialogue's connection
	parameters
	_________________________________________________________________
*/

void CClientListCtrl::OnUpdateClientspecNew(CCmdUI* pCmdUI)
{
	pCmdUI->SetText ( LoadStringResource( IDS_NEW ) );
	pCmdUI->Enable( !SERVER_BUSY() && !m_EditInProgress && !MainFrame()->IsModlessUp() );
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::ClientspecNew()
{
	OnClientspecNew( ) ;
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnClientspecNew()
{
	DoClientspecNew(FALSE, NULL);
}

void CClientListCtrl::DoClientspecNew(BOOL bUseDefTemplate, LPCTSTR defName )
{
	MainFrame()->ViewClients();
	m_ClientNew.Empty();
	m_OldClient= GET_P4REGPTR()->GetP4Client();

	//		let user type in the new name. if it's blank the user bailed.
	//
	CNewClientDlg newdlg;
	newdlg.SetNew( NEWCLIENT );
	if (FindInListAll(m_Active) != -1)
		newdlg.m_Active = m_Active;
	if (defName)
		newdlg.m_Name = defName;
	if( newdlg.DoModal( ) == IDCANCEL )
		return;

	if (newdlg.m_RunWizard)
	{
		CString txt;
		CString port = GET_P4REGPTR()->GetP4Port();
		CString clientname = newdlg.GetName();
		txt.FormatMessage( IDS_NOCLIENT_s_s_s, clientname, port, GET_P4REGPTR()->GetP4User() );
		int i;
		if ((i = txt.Find(_T('\n'))) != -1)
		{
			txt = txt.Mid(i);
			txt.TrimLeft();
		}
		CClientWizSheet dlg(LoadStringResource(IDS_CLIENTWORKSPACEWIZARD), this, 1);
		dlg.SetMsg(txt);
		dlg.SetName(clientname);
		dlg.SetPort(port);
		dlg.AllowBrowse(FALSE);
		int rc;
		while(1)
		{
			if( (rc = dlg.DoModal()) == IDCANCEL )	// user bailed
			{
				break;
			}
			if ( rc == IDIGNORE )	// user chose to browse existing clients
			{
				ViewUpdate();
				break;
			}
			else	// user clicked the Finish button on the create client page
			{
				CString newClient = dlg.GetName();
				CString newRoot   = dlg.GetRoot();
				BOOL bEdit        = dlg.IsEdit();
				BOOL bTmpl        = dlg.IsTmpl();
				CString tmplate   = dlg.GetTmpl();
				while (m_UpdateState == LIST_UPDATING)
					Sleep(100);
				if (FindInListAll(newClient) != -1)
				{
					CString msg;
					msg.FormatMessage(IDS_CANT_RECREATE_EXISTING_CLIENT_s, newClient);
					AfxMessageBox( msg, MB_ICONSTOP );
				}
				else if (!newClient.IsEmpty() && !newRoot.IsEmpty())
				{
					if (AutoCreateClientSpec(newClient, newRoot, bEdit, bTmpl, tmplate))
						break;;
				}
			}
		}
		return;
	}

	CString saveActive = m_Active;
	m_Active = newdlg.GetName( ) ;
	if ( m_Active.IsEmpty( ) )
		return;

	if ( SetP4Client( TRUE ) )
	{
		// rather than use the current directory as the default client root
		// switch to the drive's root and use that; switch back at the end.
		TCHAR	buf[MAX_PATH+1];
		TCHAR	root[4];
		if (GetCurrentDirectory(MAX_PATH, buf))
		{
			_tcsncpy(root, buf, 3);
			root[3] = '\0';
			SetCurrentDirectory(root);
		}
		else
		{
			buf[0] = _T('\0');
		}

		// Get the edit of the new spec underway
		m_NewClient  = (saveActive != m_Active);
		m_NewClicked = TRUE;
		OnEditSpec( m_Active, bUseDefTemplate );
		m_ClientNew = m_Active;

		// restore previous working directory
		if (buf[0])
			SetCurrentDirectory(buf);
	}
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnUpdateClientDelete(CCmdUI* pCmdUI)
{
	pCmdUI->Enable( OnUpdateShowMenuItem( pCmdUI, IDS_DELETE_s )
			&& GetSelectedItemText() == GET_P4REGPTR()->GetP4Client()
			&& !MainFrame()->IsModlessUp() );
}

BOOL CClientListCtrl::OKToDelete( )
{
	if ( GetSelectedItemText() == GET_P4REGPTR()->GetP4Client() )
		return TRUE;
	else
	{
		AfxMessageBox(IDS_NO_PERMISSION_TO_DELETE_OTHER_CLIENTS, MB_ICONINFORMATION);
		return FALSE;
	}
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnClientDelete()
{
	OnDelete( P4CLIENT_DEL );
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::EditTheSpec(CString *name)
{
	if (*name == GET_P4REGPTR()->GetP4Client())
		OnClientEditmy();
}

void CClientListCtrl::OnClientEditmy()
{
	m_Active = GET_P4REGPTR()->GetP4Client();
	m_OldClient= m_Active;
	m_NewClicked = m_NewClient = FALSE;

	int index = FindInList( m_Active ) ;
	if ( index  > -1 )
	{
		SetItemState(index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
		EnsureVisible(index, FALSE);
	}

	OnEditSpec( m_Active );
}

void CClientListCtrl::OnUpdateClientTemplate(CCmdUI* pCmdUI)
{
	m_Active = GetSelectedItemText();
	CString sCurrentClient = GET_P4REGPTR()->GetP4Client();

    CString prompt;
    prompt.FormatMessage(IDS_CREATE_UPDATE_CLIENT_USING_s_AS_TEMPLATE,
        m_Active.IsEmpty( ) ? TruncateString(sCurrentClient, 50) : TruncateString(m_Active, 50));
	pCmdUI->SetText ( prompt );

	pCmdUI->Enable(	!SERVER_BUSY() && !m_EditInProgress
					&& !m_Active.IsEmpty()
					&& !MainFrame()->IsModlessUp() );
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnClientTemplate()
{
	m_Template = GetSelectedItemText();
	m_OldClient= GET_P4REGPTR()->GetP4Client();
	m_Active.Empty();

	// rather than use the current directory as the default client root
	// switch to the drive's root and use that; switch back at the end.
	TCHAR	buf[MAX_PATH+1];
	TCHAR	root[4];
	if (GetCurrentDirectory(MAX_PATH, buf))
	{
		_tcsncpy(root, buf, 3);
		root[3] = '\0';
		SetCurrentDirectory(root);
	}
	else
	{
		buf[0] = _T('\0');
	}

	OnEditTemplate( m_Template );

	// restore previous working directory
	if (buf[0])
		SetCurrentDirectory(buf);
}

void CClientListCtrl::OnUpdateClearLocalTemplate(CCmdUI* pCmdUI)
{
	pCmdUI->Enable(	!CString(GET_P4REGPTR()->GetLocalCliTemplate()).IsEmpty() );
}

void CClientListCtrl::OnClearLocalTemplate()
{
	GET_P4REGPTR()->SetLocalCliTemplate(_T(""));
}

void CClientListCtrl::OnUpdateUseAsLocalTemplate(CCmdUI* pCmdUI)
{
	m_Active = GetSelectedItemText();
	CString sCurrentClient = GET_P4REGPTR()->GetP4Client();

    CString prompt;
    prompt.FormatMessage(IDS_CLIENT_USEASLOCALTEMPLATE,
        m_Active.IsEmpty( ) ? TruncateString(sCurrentClient, 50) : TruncateString(m_Active, 50));
	pCmdUI->SetText ( prompt );

	pCmdUI->Enable(	!SERVER_BUSY() && !m_EditInProgress
					&& !m_Active.IsEmpty()
					&& !MainFrame()->IsModlessUp()
					&& GET_P4REGPTR()->LocalCliTemplateSw() );
}

void CClientListCtrl::OnUseAsLocalTemplate()
{
	m_Active = GetSelectedItemText();

	if ( m_Active.IsEmpty( ) )
		return;

	CCmd_Describe *pCmd = new CCmd_Describe;
	pCmd->Init( m_hWnd, RUN_ASYNC );
	pCmd->SetAlternateReplyMsg( WM_P4DESCRIBEALT );
	if( pCmd->Run( m_viewType, m_Describing = m_Active ) )
	{
		MainFrame()->UpdateStatus( LoadStringResource(IDS_FETCHING_SPEC) );
		return;
	}
	else
	{
		delete pCmd;
		return;
	}
}

LRESULT CClientListCtrl::OnP4UseAsLocalTemplate(WPARAM wParam, LPARAM lParam)
{
	CCmd_Describe *pCmd = (CCmd_Describe *) wParam;
	CString ref = pCmd->GetReference();
	CString tmplate = pCmd->GetDescription();
	int i;
	if ((i = tmplate.Find(_T("\n\nClient:\t"))) != -1)
	{
		tmplate = tmplate.Mid(i);
		tmplate.Replace(ref, LOCALDEFTEMPLATE);
		if (GET_P4REGPTR()->SetLocalCliTemplate(tmplate))
		{
			CString msg;
			msg.FormatMessage(IDS_LOCALDEFTEMPLATESET_s, ref);
			AddToStatus(msg, SV_COMPLETION);
		}
	}
	delete pCmd;
	MainFrame()->ClearStatus();
	return 0;
}

void CClientListCtrl::OnUpdateClientDescribe(CCmdUI* pCmdUI)
{
	pCmdUI->Enable( OnUpdateShowMenuItem( pCmdUI, IDS_DESCRIBEIT_s )
					&& !MainFrame()->IsModlessUp() );
}

/*
	_________________________________________________________________

	whether to show or grey out the F5 menu item on the context menu
	_________________________________________________________________
*/

void CClientListCtrl::OnUpdateViewUpdate(CCmdUI* pCmdUI)
{
	pCmdUI->Enable(!SERVER_BUSY() && !MainFrame()->IsModlessUp());
}

/*
	_________________________________________________________________

	user hit F5 or equiv
	_________________________________________________________________
*/

void CClientListCtrl::OnViewUpdate()
{
	m_Active = GetSelectedItemText();
	SetCaption();
	CCmd_Clients *pCmd= new CCmd_Clients;
	pCmd->Init( m_hWnd, RUN_ASYNC);
	if( pCmd->Run( ) )
	{
		MainFrame()->UpdateStatus(LoadStringResource(IDS_REQUESTING_CLIENT_LISTING));
		MainFrame()->SetClientUpdateTime(GetTickCount());
		Clear();
		CP4ListCtrl::OnViewUpdate();
	}
	else
		delete pCmd;
}

CString CClientListCtrl::SetCaption()
{
	int i = GET_P4REGPTR()->GetClientFilteredFlags();
	if (i)
    {
        CString filter;
		CString txt;

		if (i & 0x10)
			txt = LoadStringResource(IDS_CURRENT_USER);
		else if (i & 0x01)
			txt = GET_P4REGPTR()->GetClientFilterOwner();
		if (i & 0x22)
		{
			if (!txt.IsEmpty())
				txt += _T(", ");
			txt += i & 0x20 ? GET_P4REGPTR()->GetHostname() : GET_P4REGPTR()->GetClientFilterHost();
		}
		if (i & 0x04)
		{
			if (!txt.IsEmpty())
				txt += _T(", ");
			txt += CString(_T("\"")) + GET_P4REGPTR()->GetClientFilterDesc() + _T("\"");
		}
		filter.FormatMessage(IDS_FILTERED, txt);
		m_caption = LoadStringResource(IDS_PERFORCE_CLIENTS) + filter;
    }
	else
		m_caption = LoadStringResource(IDS_PERFORCE_CLIENTS);

	CP4PaneContent::GetView()->SetCaption();

	return m_caption;
}

/*
	_________________________________________________________________
*/

LRESULT CClientListCtrl::NewUser(WPARAM wParam, LPARAM lParam)
{
	if (GET_P4REGPTR()->GetClientFilteredFlags() & 0x10)
		Clear();
	return 0;
}

void CClientListCtrl::Clear()
{
    SetRedraw(FALSE);
	DeleteAllItems();
    SetRedraw(TRUE);

	CP4ListCtrl::Clear();
}

/*
	_________________________________________________________________

	called when user right clicks on a clientspec. create one of two
	menus, depending on where the user clicked.

	if user has highlighted a client, allow them to do the usual
	things to a client view. (describe it, switch to it, use it as
	a template to create a new client)
	(edit and delete -- i need to know the owner. but delete is already there!)

	if the user clicked on a random part of the pane, show
	only the general choices, like refresh, create a new client
	-- and maybe edit the current client?
	_________________________________________________________________
*/

void CClientListCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
{
	//		make sure window is active
	//
	GetParentFrame()->ActivateFrame();

	///////////////////////////////
	// See ContextMenuRules.txt for order of menu commands!

	//		create an empty context menu
	//
	CP4Menu popMenu;
	popMenu.CreatePopupMenu();

 	int	index;
    SetIndexAndPoint( index, point );

	// Can always create a new client
	popMenu.AppendMenu( stringsON, ID_CLIENTSPEC_NEW );

	// Only offer edit if no other client is selected
	if ( index == -1 || GetSelectedItemText() == GET_P4REGPTR()->GetP4Client() )
		popMenu.AppendMenu( stringsON, ID_CLIENT_EDITMY );

	if( index != -1 )
	{
		// Make sure item gets selected
		SetItemState( index, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED );

		popMenu.AppendMenu( stringsON, ID_CLIENT_DESCRIBE ); //or client edit if user is the owner
		popMenu.AppendMenu( stringsON, ID_CLIENT_DELETE );

		popMenu.AppendMenu( MF_SEPARATOR );

		// Can only switch to a client if its not my current client
		if ( GetSelectedItemText() != GET_P4REGPTR()->GetP4Client() )
			popMenu.AppendMenu( stringsON, ID_CLIENTSPEC_SWITCH );
		else	// can only set as default if it is my current client
			popMenu.AppendMenu( stringsON, ID_SETDEFCLIENT );

		popMenu.AppendMenu( stringsON, ID_CLIENT_TEMPLATE );
		if (GET_P4REGPTR()->LocalCliTemplateSw())
		{
			popMenu.AppendMenu( MF_SEPARATOR );
			popMenu.AppendMenu( stringsON, ID_CLIENT_USEASLOCALTEMPLATE, LoadStringResource(IDS_CLIENT_USEASLOCALTEMPLATE) );
			popMenu.AppendMenu( stringsON, ID_CLIENT_CLEARLOCALTEMPLATE, LoadStringResource(IDS_CLIENT_CLEARLOCALTEMPLATE) );
		}
	}
	popMenu.AppendMenu( MF_SEPARATOR );
	popMenu.AppendMenu( stringsON, ID_FILTERCLIENTS, LoadStringResource(IDS_FILTERCLIENTS) );
	popMenu.AppendMenu( stringsON, ID_CLEARCLIENTFILTER, LoadStringResource(IDS_CLEARCLIENTFILTER) );
	popMenu.AppendMenu( MF_SEPARATOR );
	CString txt = GetSelectedItemText();
	if (txt.IsEmpty())
		txt = GET_P4REGPTR()->GetP4Client( );
	txt = LoadStringResource(IDS_CHGS_BY_CLIENT) + txt;
	txt = TruncateString(txt, 50);
	popMenu.AppendMenu( stringsON, ID_CHGS_BY_CLIENT, txt );
	popMenu.AppendMenu( stringsON, ID_VIEW_UPDATE, LoadStringResource(IDS_REFRESH) );

	MainFrame()->AddToolsToContextMenu(&popMenu);

	//		put up the menu
	//
	popMenu.TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd( ) );
}

/////////////////////////////////////////////////////////////////////////////
// CClientListCtrl message handlers

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnUpdateClientspecSwitch(CCmdUI* pCmdUI)
{
	CString selClient = GetSelectedItemText();
    CString prompt;
    prompt.FormatMessage(IDS_SWITCH_TO_s, TruncateString(selClient, 50));
	pCmdUI->SetText ( prompt );
	pCmdUI->Enable( !SERVER_BUSY()
					&& !selClient.IsEmpty()
					&& selClient != GET_P4REGPTR()->GetP4Client( )
					&& !MainFrame()->IsModlessUp());
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnClientspecSwitch()
{
	ClientSpecSwitch(GetSelectedItemText());
}

BOOL CClientListCtrl::ClientSpecSwitch(CString switchTo, BOOL bAlways /*=FALSE*/, BOOL portWasChanged /*= FALSE*/)
{
	CCmd_Describe *pCmd = new CCmd_Describe;
	pCmd->Init( NULL, RUN_SYNC );
	BOOL cmdStarted= pCmd->Run( P4CLIENT_SPEC, switchTo );
	if(cmdStarted && !pCmd->GetError())
	{
		CString options= TheApp()->GetClientSpecField( _T("Options"), pCmd->GetDescription() );
		if (( options.Find(_T("unlocked")) == -1 ) && ( options.Find(_T("locked")) != -1 ))
		{
			CString lockedby= TheApp()->GetClientSpecField( _T("Owner"), pCmd->GetDescription() );
			if ( lockedby.Compare( GET_P4REGPTR()->GetP4User() ) != 0 )
			{
				CString errmsg;
                errmsg.FormatMessage(IDS_CLIENT_s_IS_LOCKED_BY_USER_s_AND_CANT_BE_USED_BY_s,
                    switchTo, lockedby, GET_P4REGPTR()->GetP4User());
				AddToStatus( errmsg, SV_WARNING );
				AfxMessageBox( errmsg, MB_ICONEXCLAMATION );
				delete pCmd;
				return FALSE;
			}
		}
	}
	delete pCmd;

	m_Active = switchTo;

	if ( SetP4Client( bAlways ) )
		MainFrame()->OnPerforceOptions( FALSE, portWasChanged ) ;
	return TRUE;
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnUpdateSetDefClient(CCmdUI* pCmdUI)
{
	CString selClient = GetSelectedItemText();
    CString prompt;
    prompt.FormatMessage(IDS_SETDEFCLIENT_s, TruncateString(selClient, 50));
	pCmdUI->SetText ( prompt );
	pCmdUI->Enable( !SERVER_BUSY()
					&& !selClient.IsEmpty()
					&& selClient == GET_P4REGPTR()->GetP4Client( FALSE )
					&& selClient != GET_P4REGPTR()->GetP4Client( TRUE )
					&& !MainFrame()->IsModlessUp() );
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::OnSetDefClient()
{
	if (m_Active != GetSelectedItemText())
	{
		ASSERT(0);
		return;
	}

	if (GET_P4REGPTR()->GetExpandFlag() == 1)
		GET_P4REGPTR()->AddMRUPcuPath(MainFrame()->GetCurrentItemPath());

	if( !GET_P4REGPTR()->SetP4Client( m_Active, TRUE, TRUE, TRUE ) )
	{
		AfxMessageBox(IDS_UNABLE_TO_WRITE_P4CLIENT_TO_THE_REGISTRY, MB_ICONEXCLAMATION);
		m_Active = GetSelectedItemText();
	}
	else
    {
        CString msg;
        msg.FormatMessage(IDS_DEFAULT_CLIENT_SET_TO_s, m_Active);
		AddToStatus( msg );
    }
}

/*
	_________________________________________________________________
*/

//fanny: damn! p4clients doesn't give you the owner! how can i put up an
//edit menu item without checking first?

void CClientListCtrl::InsertClient(CP4Client *client, int index,
								   CString *curclient, CString *defclient, CString *user)
{
	ASSERT(client != NULL);
	m_iImage = CP4ViewImageList::VI_CLIENT;

	LV_ITEM lvItem;
	int iActualItem = -1;
	CString txt;
	BOOL bFilteredOut = MainFrame()->IsClientFilteredOut(client, user, curclient, defclient);

	for(int subItem=0; subItem < CLIENT_MAXCOL; subItem++)
	{
		lvItem.mask=LVIF_TEXT |
					((subItem==0) ? LVIF_IMAGE : 0) |
					((subItem==0) ? LVIF_PARAM : 0);

		lvItem.iItem= (subItem==0) ? index : iActualItem;
        ASSERT(lvItem.iItem != -1 || bFilteredOut);

		lvItem.iSubItem= subItem;

		switch(subItem)
		{
		case CLIENT_NAME:
			{
			lvItem.pszText = const_cast<LPTSTR>(client->GetClientName());
			bool isCurrent = curclient->Compare(lvItem.pszText) == 0;
			bool isDefault = defclient->Compare(lvItem.pszText) == 0;
			lvItem.iImage = CP4ViewImageList::GetClientIndex(isCurrent, isDefault);
			if(isDefault)
				m_OldDefClient = lvItem.pszText;
			if(isCurrent)
				m_OldCurClient = lvItem.pszText;
	        lvItem.lParam=(LPARAM) client;
			}
			break;
		case CLIENT_OWNER:
			lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) client->GetOwner()); break;
		case CLIENT_HOST:
			lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) client->GetHost()); break;
		case CLIENT_ACCESSDATE:
			lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) client->GetDate()); break;
		case CLIENT_ROOT:
			lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) client->GetRoot()); break;
		case CLIENT_DESC:
			txt= PadCRs(client->GetDescription());
			lvItem.pszText = const_cast<LPTSTR>( (LPCTSTR) txt); break;
		default:
			ASSERT( 0 ); lvItem.pszText = _T("@"); break;
		}

		m_ListAll.column[subItem].SetAtGrow(index, lvItem.pszText);
		if (bFilteredOut)
			continue;

		if (subItem==0)
		{
			static	BOOL	bErrDispalyed=FALSE;
			iActualItem=InsertItem(&lvItem);
			if (iActualItem==-1 && !bErrDispalyed)
			{
				AfxMessageBox(_T("Client item insert failure"), MB_ICONSTOP);
				bErrDispalyed = TRUE;
			}
		}
		else
			SetItem(&lvItem);
	}
	if (bFilteredOut)
		delete client;
}

/*
	_________________________________________________________________
*/

void CClientListCtrl::UpdateClient(CP4Client *client, int index)
{
	// After a spec edit, update the appropriate list item
	// First, switch the client data
	CP4Client *oldClient= (CP4Client *) GetItemData(index);
	delete oldClient;
	SetItemData(index, (LPARAM) client);

	// Then update the text
	SetItemText(index, CLIENT_NAME,    const_cast<LPTSTR>( (LPCTSTR) client->GetClientName()));
	SetItemText(index, CLIENT_OWNER,   const_cast<LPTSTR>( (LPCTSTR) client->GetOwner()));
	SetItemText(index, CLIENT_HOST,    const_cast<LPTSTR>( (LPCTSTR) client->GetHost()));
	SetItemText(index, CLIENT_ACCESSDATE, const_cast<LPTSTR>( (LPCTSTR) client->GetDate()));
	SetItemText(index, CLIENT_ROOT,    const_cast<LPTSTR>( (LPCTSTR) client->GetRoot()));
	CString	txt= PadCRs(client->GetDescription());
	SetItemText(index, CLIENT_DESC,    const_cast<LPTSTR>((LPCTSTR)txt));
}

void CClientListCtrl::UpdateClientAll(CP4Client *client, int index)
{
	m_ListAll.column[CLIENT_NAME].SetAt(index, const_cast<LPTSTR>((LPCTSTR)client->GetClientName()));
	m_ListAll.column[CLIENT_OWNER].SetAt(index, const_cast<LPTSTR>((LPCTSTR)client->GetOwner()));
	m_ListAll.column[CLIENT_HOST].SetAt(index, const_cast<LPTSTR>((LPCTSTR)client->GetHost()));
	m_ListAll.column[CLIENT_ACCESSDATE].SetAt(index, const_cast<LPTSTR>((LPCTSTR)client->GetDate()));
	m_ListAll.column[CLIENT_ROOT].SetAt(index, const_cast<LPTSTR>((LPCTSTR)client->GetRoot()));
	CString	txt= PadCRs(client->GetDescription());
	m_ListAll.column[CLIENT_DESC].SetAt(index, const_cast<LPTSTR>((LPCTSTR)txt));
}

/*
	_________________________________________________________________

	Receives ak for client spec edit
	_________________________________________________________________
*/

LRESULT CClientListCtrl::OnP4ClientSpec(WPARAM wParam, LPARAM lParam)
{
	m_PrevNbrCli = m_UpdateState == LIST_CLEAR ? -1 : GetItemCount();
	m_saveclientnew = m_ClientNew;	// save name of freshly created client
	CCmd_EditSpec *pCmd = (CCmd_EditSpec *) wParam;

	if (pCmd->GetUseLocalDefTmplate())
	{
        CString specIn(pCmd->GetSpecIn());
		int i;
		if ((i = specIn.Find(_T("\n\nClient:\t"))) != -1)
		{
			CString tmplate = GET_P4REGPTR()->GetLocalCliTemplate();
			tmplate.Replace(LOCALDEFTEMPLATE, pCmd->GetItemName());
			pCmd->SetSpecIn(specIn.Left(i) + tmplate);
		}
	}

	m_ClientNew.Empty();

	// let the dialogbox know whether this is a new client or an edit of an existing one
	int index= FindInListAll(m_Active.IsEmpty() ? pCmd->GetItemName() : m_Active);
	if ((index == -1) || !GetItemCount())	// if name not in client list
		 index = m_NewClient ? -1 : -2;		//	it's new if and only if they clicked 'New'
	pCmd->SetIsNewClient(m_isNew = (index == -1));
	pCmd->SetIsRequestingNew(m_NewClicked);
	pCmd->SetOldClient(m_OldClient);
	pCmd->SetCaller(DYNAMIC_DOWNCAST(CView, GetParent()));
	m_NewClicked = m_NewClient = FALSE;	// clear these now, cuz no longer needed
    if (m_AddToViewList.GetCount() > 0)	// We have files to add to the Reviews list
	{
        CString specIn(pCmd->GetSpecIn());
		int i;
		if ((i = specIn.Find(_T("\n\nView:\n"))) == -1)
		{
			i = specIn.GetLength();
			specIn += _T("\n\nView:\n");
		}
		else
			specIn += _T("\t@\t@\n");	//	A view that is @[TAB]@ means
											//	put a blank line in the list here.
		POSITION pos;
		CString filename;
		CString localname;
		BOOL b = GET_P4REGPTR()->UseDepotInClientView();
		for (pos = m_AddToViewList.GetHeadPosition(); pos != NULL; )
		{
			filename = m_AddToViewList.GetNext(pos);
			if ((i = filename.Find(_T("<contains no files or folders>"))) != -1)
				filename = filename.Left(i-1) + _T("/...");
			localname = CString ( _T("//") ) + GET_P4REGPTR()->GetP4Client();
			if (!b && ((i = filename.Find(_T('/'), 2)) > 2))
				localname += filename.Right(filename.GetLength() - i);
			else
				localname += filename.Right(filename.GetLength() - 1);
			if (filename.Find(_T(' ')))
				filename = _T('\"') + filename + _T('\"');
			if (localname.Find(_T(' ')))
				localname = _T('\"') + localname + _T('\"');
			specIn += _T('\t') + filename + _T('\t') + localname + _T('\n');
		}
		m_AddToViewList.RemoveAll();		// this info is no longer needed
        pCmd->SetSpecIn(specIn);
	}
	// show the dialog box
	if(!pCmd->GetError() && !m_EditInProgress && pCmd->DoSpecDlg(this))
	{
		m_EditInProgress = TRUE;
		m_EditInProgressWnd = pCmd->GetSpecSheet();
	}
	else
	{
		if (GET_P4REGPTR()->GetExpandFlag() == 1)
			GET_P4REGPTR()->AddMRUPcuPath(MainFrame()->GetCurrentItemPath());
		m_Active = m_OldClient;
		GET_P4REGPTR()->SetP4Client( m_Active, TRUE, FALSE, FALSE);
		MainFrame()->UpdateCaption( ) ;
        delete m_pNewSpec;

		if (pCmd->HaveServerLock())
			pCmd->ReleaseServerLock();
		delete pCmd;
	}

	MainFrame()->ClearStatus();
	return 0;
}

LRESULT CClientListCtrl::OnP4EndSpecEdit( WPARAM wParam, LPARAM lParam )
{
	CCmd_EditSpec *pCmd= (CCmd_EditSpec *) wParam;
	BOOL chainedCommand = FALSE;
	BOOL need2Refresh = FALSE;

	if (lParam != IDCANCEL && lParam != IDABORT)
	{
		// Get the Sync flag
		int syncAfter = SYNC_DONT;
		BOOL bHasChgs = TRUE;
		if (m_PrevNbrCli < 1)
		{
			int key= pCmd->HaveServerLock() ? pCmd->GetServerKey() : 0;
			CCmd_Changes *pCmd2= new CCmd_Changes;
			pCmd2->Init( m_hWnd, RUN_SYNC, key ? HOLD_LOCK : LOSE_LOCK, key);
			if( pCmd2->Run(SUBMITTED_CHANGES, FALSE, NULL, 1) )
			{
				if (!pCmd2->GetChanges()->GetCount())
					bHasChgs = FALSE;
			}
			delete pCmd2;
		}
		if (m_isNew && !GET_P4REGPTR()->DontShowYouHaveCr8NewClient() && bHasChgs)
		{
			BOOL b;
			switch(MsgBox(IDS_YOU_HAVE_CREATED_NEW_CLIENT,
						MB_ICONEXCLAMATION | MB_DEFBUTTON1, 0, this, &b))
			{
			case IDC_BUTTON1:
				syncAfter = SYNC_HEAD;
				break;
			case IDC_BUTTON2:
				syncAfter = SYNC_DONT;
				break;
			}
			GET_P4REGPTR()->SetDontShowYouHaveCr8NewClient(b);
		}
		else if ((pCmd->IsSyncAfter() || pCmd->IsAutoUpdateSpec())
			  && !GET_P4REGPTR()->DontShowYouHaveChgClientView() && bHasChgs)
		{
			BOOL b;
			switch(MsgBox(pCmd->IsAutoUpdateSpec() ? IDS_DOYOUWANTOTSYNCYOURNEWCLIENT
												   : IDS_YOU_HAVE_CHANGED_CLIENTS_VIEW,
												   MB_ICONQUESTION | MB_DEFBUTTON1, 0, this,
												   pCmd->IsAutoUpdateSpec() ? NULL : &b))
			{
			case IDC_BUTTON1:
				syncAfter = SYNC_HEAD;
				break;
			case IDC_BUTTON2:
				syncAfter = pCmd->IsAutoUpdateSpec() ? SYNC_DONT : SYNC_HAVE;
				break;
			case IDC_BUTTON3:
				syncAfter = SYNC_DONT;
				break;
			}
			if (!pCmd->IsAutoUpdateSpec())
				GET_P4REGPTR()->SetDontShowYouHaveChgClientView(b);
		}

		BOOL bDeld = FALSE;
		if (m_UpdateState == LIST_UPDATED)
		{
			// we have to set 'index' again in case client's name got changed
			int index= FindInList(m_pNewSpec->GetClientName());
			int ixAll= FindInListAll(m_pNewSpec->GetClientName());
			if (ixAll == -1)	// not in either list
			{
				ASSERT(index == -1);
				CString curclient = GET_P4REGPTR()->GetP4Client();
				CString defclient = GET_P4REGPTR()->GetP4Client(TRUE);
				InsertClient(m_pNewSpec, GetItemCount(), &curclient, &defclient);
			}
			else if (index > -1)	// in both lists
			{
				ASSERT(ixAll > -1);
				if (MainFrame()->IsClientFilteredOut(m_pNewSpec))	// should it no longer be shown?
				{
					need2Refresh = TRUE;
					delete m_pNewSpec;
				}
				else
				{
					UpdateClient(m_pNewSpec, index);
					UpdateClientAll(m_pNewSpec, ixAll);
				}
			}
			else	// not in visible list; is in list of all
			{
				if (MainFrame()->IsClientFilteredOut(m_pNewSpec))	// should it now be shown?
					need2Refresh = TRUE;
				else
					UpdateClientAll(m_pNewSpec, ixAll);
				if (pCmd->IsAutoUpdateSpec())
					m_OldClient = m_pNewSpec->GetClientName();
				delete m_pNewSpec;
				bDeld = TRUE;
			}
			ReSort();
			if (pCmd->IsAutoUpdateSpec() || pCmd->IsSpecForceSwitch())
			{
				if (bDeld)
					need2Refresh = TRUE;
				else
				{
					int i = FindInList(m_OldClient = m_pNewSpec->GetClientName());
					if (i < 0)
						i = 0;
					SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
					EnsureVisible(i, FALSE);
				}
				m_Active = _T("@");			// force switch to new client
			}
		}
		else
			if ( m_pNewSpec ) delete m_pNewSpec;

		int key= pCmd->HaveServerLock() ? pCmd->GetServerKey() : 0;
		if( m_Active == m_saveclientnew )	// active-client == saved new client name
			m_OldClient = m_saveclientnew;	//   means they decided to edit the current client
		if( m_Active != m_OldClient )		// If current client is not now the client when this
		{									//   all started, switch to the new current client
			if (GET_P4REGPTR()->GetExpandFlag() == 1)
				GET_P4REGPTR()->AddMRUPcuPath(MainFrame()->GetCurrentItemPath());
			m_Active = m_OldClient;
			GET_P4REGPTR()->SetP4Client( m_Active, TRUE, FALSE, FALSE);
			MainFrame()->UpdateCaption( );
			if (syncAfter)
				chainedCommand = SyncAfter(key, syncAfter);
        }
		else if( syncAfter || GET_P4REGPTR()->GetClearAndReload()
				|| AfxMessageBox(IDS_YOU_HAVE_UPDATED_YOUR_CLIENT_WORKSPACE__CLEAR_AND_RELOAD,
								MB_YESNO |MB_ICONQUESTION ) == IDYES )
		{
			if (syncAfter)
				chainedCommand = SyncAfter(key, syncAfter);
			else
			{
				int key= pCmd->HaveServerLock() ? pCmd->GetServerKey() : 0;
				MainFrame()->UpdateDepotandChangeViews(REDRILL, key);
				chainedCommand=TRUE;
			}
		}
		if (GET_SERVERLEVEL() >= 22)
			TheApp()->Set_m_ClientSubOpts(TheApp()->GetClientSpecField( _T("SubmitOptions"), pCmd->GetSpecOut()));
    }
	else
	{
		if ( m_pNewSpec )
			delete m_pNewSpec;
		if (lParam == IDCANCEL && pCmd->GetIsRequestingNew())
		{
			m_Active = pCmd->GetOldClient();	// switch back to the previous client
			GET_P4REGPTR()->SetP4Client( m_Active, TRUE, FALSE, FALSE);
			MainFrame()->UpdateCaption( );
		}
	}

	if (lParam != IDABORT)
	{
		MainFrame()->ClearStatus();
		if (!chainedCommand && pCmd->HaveServerLock())
			pCmd->ReleaseServerLock();
		CDialog *dlg = (CDialog *)pCmd->GetSpecSheet();
		dlg->DestroyWindow();
	}
	delete pCmd;
	m_EditInProgress = FALSE;

	if (need2Refresh && !chainedCommand)
		OnViewUpdate();

	if (TheApp()->m_RunClientWizOnly && !chainedCommand)
		::PostMessage(MainFrame()->m_hWnd, WM_COMMAND, ID_APP_EXIT, 0);
	return 0;
}

// After a client spec has been update, this may get called to sync the client
BOOL CClientListCtrl::SyncAfter(int key, int syncAfter)
{
	CCmd_Get *pCmd= new CCmd_Get;
	pCmd->Init( m_hWnd, RUN_ASYNC, HOLD_LOCK, key);
	m_AddToViewList.RemoveAll();
	m_AddToViewList.AddHead(CString(syncAfter == SYNC_HEAD ? _T("#head") : _T("#have")));
	if( pCmd->Run( &m_AddToViewList, FALSE, FALSE ) )
	{
		MainFrame()->UpdateStatus( LoadStringResource(IDS_FILE_SYNC) );
		return TRUE;
	}
	else
	{
		delete pCmd;
		return FALSE;
	}
}

LRESULT CClientListCtrl::OnP4Sync(WPARAM wParam, LPARAM lParam)
{
	CCmd_Get *pCmd= (CCmd_Get *) wParam;
	if (TheApp()->m_RunClientWizOnly)
	{
		if (pCmd->GetWarningsCount() == 0)
		{
			pCmd->ReleaseServerLock();
			::PostMessage(MainFrame()->m_hWnd, WM_COMMAND, ID_APP_EXIT, 0);
		}
		else
		{
			TheApp()->m_RunClientWizOnly = FALSE;
			::ShowWindow(MainFrame()->m_hWnd, SW_RESTORE);
			MainFrame()->UpdateDepotandChangeViews(REDRILL, pCmd->GetServerKey());
		}
	}
	else
		MainFrame()->UpdateDepotandChangeViews(REDRILL, pCmd->GetServerKey());
	delete pCmd;
	return 0;
}

/*
	_________________________________________________________________
*/

LRESULT CClientListCtrl::OnP4ClientList(WPARAM wParam, LPARAM lParam)
{
	CCmd_Clients *pCmd= (CCmd_Clients *) wParam;

	if(!pCmd->GetError())
	{
		CString msg;
		CObList const *clients= pCmd->GetList();
		int count = clients->GetCount();

		SetRedraw(FALSE);
    	int index = 0;
		CString curclient = GET_P4REGPTR()->GetP4Client();
		CString defclient = GET_P4REGPTR()->GetP4Client(TRUE);
		CString user      = GET_P4REGPTR()->GetP4User();
		for(int subItem=0; subItem < CLIENT_MAXCOL; subItem++)
			m_ListAll.column[subItem].SetSize(clients->GetCount(), 100);
		for(POSITION pos= clients->GetHeadPosition(); pos != NULL; index++)
		{
			CP4Client *client=(CP4Client *) clients->GetNext(pos);
			InsertClient(client, index, &curclient, &defclient, &user);
			if ((index & 0x1FFF) == 0)
			{
				msg.FormatMessage(IDS_INSERTING_CLIENTS, count - index);
				MainFrame()->UpdateStatus(msg);
			}
		}
        SetRedraw(TRUE);

		msg.FormatMessage( IDS_NUMBER_OF_CLIENTS_n, index );
		AddToStatus( msg, SV_COMPLETION );

		ReSort();

		// Make sure previous item is re-selected
		if(clients->GetCount() > 0)
		{
			int i = FindInList(m_Active.IsEmpty() ? GET_P4REGPTR()->GetP4Client() : m_Active);
			if (i < 0)	i=0;
			SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
			EnsureVisible(i, FALSE);
		}

		CP4ListCtrl::SetUpdateDone();
		// Notify the mainframe that we have finished getting the clients,
		// hence the entire set of async command have finished.
		MainFrame()->ExpandDepotIfNeedBe();
		if (m_PostViewUpdateMsg)
			PostMessage(m_PostViewUpdateMsg, m_PostViewUpdateWParam, m_PostViewUpdateLParam);
	}
	else
		CP4ListCtrl::SetUpdateFailed();

	delete pCmd;
	m_PostViewUpdateMsg = 0;
	MainFrame()->ClearStatus();
	return 0;
}

/*
	_________________________________________________________________

	Sort callback, not in class
	_________________________________________________________________
*/

int CClientListCtrl::OnCompareItems(LPARAM lParam1, LPARAM lParam2, int subItem)
{
    ASSERT(lParam1 && lParam2);
    CP4Client const *client1 = (CP4Client const *)lParam1;
    CP4Client const *client2 = (CP4Client const *)lParam2;
	CString txt1, txt2;
	switch(subItem)
	{
	case CLIENT_NAME:
		txt1 = client1->GetClientName();
		txt2 = client2->GetClientName();
		break;

	case CLIENT_OWNER:
		txt1 = client1->GetOwner();
		txt2 = client2->GetOwner();
		break;

	case CLIENT_HOST:
		txt1 = client1->GetHost();
		txt2 = client2->GetHost();
		break;

	case CLIENT_ACCESSDATE:
		txt1 = client1->GetDate();
		txt2 = client2->GetDate();
		ConvertDates( txt1, txt2 );
		break;

	case CLIENT_ROOT:
		txt1 = client1->GetRoot();
		txt2 = client2->GetRoot();
		break;

	case CLIENT_DESC:
		txt1 = client1->GetDescription();
		txt2 = client2->GetDescription();
		break;

	default:
		ASSERT(0);
		return 0;
	}

	txt1.MakeUpper();
	txt2.MakeUpper();

	int rc;

	if(m_SortAscending)
		rc = txt1.Compare(txt2);
	else
		rc = txt2.Compare(txt1);

	return rc;
}

/*
	_________________________________________________________________

	when creating a new client or switching to another one.
	_________________________________________________________________
*/

BOOL CClientListCtrl::SetP4Client( BOOL bAlways )
{
	//		not that we'd ever get here... but if they are the same, there
	//		is nothing to do, so bail.
	//
	if ( !bAlways && ( m_Active == GET_P4REGPTR()->GetP4Client() ) )
		return FALSE;

	if (GET_P4REGPTR()->GetExpandFlag() == 1)
		GET_P4REGPTR()->AddMRUPcuPath(MainFrame()->GetCurrentItemPath());

	//		okay, change the session's client.
	//		(either we're setting the active client back to the registered one
	//		after using another client, or we are officially resetting
	//		the registered client to the new active one.)
	//

	if( !GET_P4REGPTR()->SetP4Client( m_Active, TRUE, FALSE, FALSE ) )
	{
		AfxMessageBox(IDS_UNABLE_TO_WRITE_P4CLIENT_TO_THE_REGISTRY, MB_ICONEXCLAMATION);
		m_Active  = GET_P4REGPTR()->GetP4Client();
		return FALSE;
	}

	MainFrame()->UpdateCaption( ) ;

	return TRUE;
}

/*
	_________________________________________________________________
*/

BOOL CClientListCtrl::AutoCreateClientSpec(LPCTSTR clientName, LPCTSTR clientRoot,
										   BOOL bEdit, BOOL bTmpl, LPCTSTR tmplate)
{
	m_pNewSpec= new CP4Client;

	CCmd_EditSpec *pCmd= new CCmd_EditSpec;
	pCmd->Init(m_hWnd, RUN_ASYNC, HOLD_LOCK);
	if (bTmpl && !(CString(GET_P4REGPTR()->GetLocalCliTemplate()).IsEmpty())
	 && CString(tmplate) == CString(LOCALDEFTEMPLATE))
	{
		pCmd->SetUseLocalDefTmplate(TRUE);
		bTmpl = FALSE;
		bEdit = TRUE;
	}
	else
		pCmd->SetNewClientRoot(clientRoot);
	pCmd->SetAutoUpdateSpec(bEdit ? FALSE : TRUE);
	BOOL b;
	if (bTmpl)
		b = pCmd->Run( P4CLIENT_SPEC, clientName, tmplate, m_pNewSpec );
	else
		b = pCmd->Run( P4CLIENT_SPEC, clientName, m_pNewSpec );
	if( b )
	{
		MainFrame()->UpdateStatus( LoadStringResource(IDS_EDITING_CLIENT_SPEC) ) ;
		return TRUE;
	}
	delete pCmd;
	delete m_pNewSpec;
	return FALSE;
}

void CClientListCtrl::OnEditSpec( LPCTSTR clientName, BOOL bUseDefTemplate /*=FALSE*/ )
{
	if (m_EditInProgress)
	{
		CantEditRightNow(IDS_CLIENT);
		return;
	}

	m_pNewSpec= new CP4Client;

	CCmd_EditSpec *pCmd= new CCmd_EditSpec;
	pCmd->Init( m_hWnd, RUN_ASYNC, HOLD_LOCK);
	pCmd->SetUseLocalDefTmplate(bUseDefTemplate);
	if( pCmd->Run( P4CLIENT_SPEC, clientName, m_pNewSpec ) )
		MainFrame()->UpdateStatus( LoadStringResource(IDS_EDITING_CLIENT_SPEC) ) ;
	else
	{
		delete pCmd;
		delete m_pNewSpec;
	}
}

void CClientListCtrl::OnEditTemplate( LPCTSTR templateName )
{
    // Get a list of all clients, so the dialog can check
    // for a bungle like trying to create a client that
    // already exists
    CStringList list;
    int index=-1;
	m_NewClicked=m_NewClient=FALSE;
	if( GET_SERVERLEVEL() >= 6 )
		list.AddHead( templateName );
	else
	{
		while(1)
		{
			index=GetNextItem(index, LVNI_ALL);
			if( index == -1)
				break;

			TCHAR str[ 1024 ];
			GetItemText(index, 0, str, 1024 );
			list.AddHead(str);
		}
    }

    // Prompt for the new client name, using p4client as a
    // default value
    CTemplateNameDlg dlg;
    dlg.SetTemplateName(templateName);
    dlg.SetVerbotenSpecNames(&list);
    dlg.SetNewSpecName(GET_P4REGPTR()->GetP4Client( ));
	dlg.SetSpecType( P4CLIENT_SPEC );

    if(dlg.DoModal() != IDCANCEL)
    {
		CString saveActive = m_Active;
        m_Active = dlg.GetNewSpecName();	//set and switch to new client
		if (SetP4Client( TRUE ))
		{
			m_pNewSpec= new CP4Client;
			CCmd_EditSpec *pCmd= new CCmd_EditSpec;
			pCmd->Init( m_hWnd, RUN_ASYNC, HOLD_LOCK);
			if( pCmd->Run( P4CLIENT_SPEC, m_Active, templateName, m_pNewSpec ) )
			{
				MainFrame()->UpdateStatus( LoadStringResource(IDS_EDITING_CLIENT_SPEC) ) ;
				m_NewClicked = m_NewClient = TRUE;
				m_ClientNew = m_Active;
			}
			else
			{
				delete pCmd;
				delete m_pNewSpec;
				m_Active = saveActive;
				SetP4Client( TRUE );
			}
		}
    }
}

/////////////////////////////////////////////////////////////////////
// OLE drag-drop support, to accept depot files or folders
// which will define a view to be used to filter the submitted
// changes that this window displays
/////////////////////////////////////////////////////////////////////

DROPEFFECT CClientListCtrl::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
	m_DropEffect=DROPEFFECT_NONE;
	m_DragDataFormat=0;
	CString fname;

	// Dont allow a drop if the server is busy, since a drop immediately attempts to
	// invoke a server command
	// Also don't allow a drop if we are in local syntax because
	// the left side of the view needs to be specified in depot syntax
	if(SERVER_BUSY() || m_EditInProgress || GET_P4REGPTR( )->ShowEntireDepot( ) > SDF_DEPOT)
		return DROPEFFECT_NONE;

	if(pDataObject->IsDataAvailable( (unsigned short) m_CF_DEPOT))
	{
		m_DropEffect=DROPEFFECT_COPY;
		m_DragDataFormat=m_CF_DEPOT;
	}

	return m_DropEffect;
}

DROPEFFECT CClientListCtrl::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
	// Dont allow a drop if the server is busy, since a drop immediately attempts to
	// invoke a server command
	if(SERVER_BUSY() || m_EditInProgress)
		m_DropEffect= DROPEFFECT_NONE;

	return m_DropEffect;
}

BOOL CClientListCtrl::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point)
{
	CString fname;

	if(SERVER_BUSY() || m_EditInProgress)
	{
		// OnDragEnter() and OnDragOver() should avoid a drop at
		// the wrong time!
		ASSERT(0);
		return FALSE;
	}

	if(m_DragDataFormat == m_CF_DEPOT)
	{
		ClientToScreen(&point);
		::SendMessage(m_depotWnd, WM_DROPTARGET, CLIENTVIEW, MAKELPARAM(point.x,point.y));
		return TRUE;
	}
	// Return false, so depot window doesnt start a file-open operation
	return FALSE;
}

int CClientListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CP4ListCtrl::OnCreate(lpCreateStruct) == -1)
		return -1;

	CStringArray colnames;
	colnames.Add ( LoadStringResource(IDS_CLIENT) );
	colnames.Add ( LoadStringResource(IDS_OWNER) );
	colnames.Add ( LoadStringResource(IDS_HOST) );
	colnames.Add ( LoadStringResource(IDS_DATE) );
	colnames.Add ( LoadStringResource(IDS_ROOT) );
	colnames.Add ( LoadStringResource(IDS_DESCRIPTION) );
	ASSERT( CLIENT_MAXCOL == colnames.GetSize( ) );
    //FIXTHIS: default column widths should be in resource
	int width[ CLIENT_MAXCOL ]={90,90,90,90,150,150};
	RestoreSavedWidths(width, colnames.GetSize( ), sRegValue_ClientList );
	InsertColumnHeaders( colnames, width );

	return 0;
}

void CClientListCtrl::OnUpdateAddToClientView(CCmdUI* pCmdUI)
{
	CString txt;
    txt.FormatMessage(IDS_ADD_FILES_TO_CLIENT_s_VIEW, GET_P4REGPTR()->GetP4Client());
	pCmdUI->SetText ( txt );
	pCmdUI->Enable( !SERVER_BUSY() && !m_EditInProgress
		&& GET_P4REGPTR()->ShowEntireDepot() <= SDF_DEPOT );
}

void CClientListCtrl::OnAddToClientView()
{
    if( ! SERVER_BUSY() && IDYES == AfxMessageBox(IDS_CONFIRMADDTOVIEW, MB_YESNO|MB_ICONQUESTION))
    {
	    ::SendMessage(m_depotWnd, WM_GETSELLIST, (WPARAM) &m_AddToViewList, 0);
	    if(m_AddToViewList.GetCount() > 0)
		{
			OnClientEditmy();
		}
	}
}

BOOL CClientListCtrl::TryDragDrop( )
{
	// Store the client this is from
	m_DragFromItemName = GetSelectedItemText();

	m_OLESource.DelayRenderData( (unsigned short) m_CF_CLIENT);

	return m_OLESource.DoDragDrop(DROPEFFECT_COPY, &m_DragSourceRect, NULL)
			== DROPEFFECT_NONE ? FALSE : TRUE;
}

void CClientListCtrl::OnNewClient(WPARAM wParam, LPARAM lParam)
{
	if (!IsClear())
	{
		CString oldclient = wParam ? m_OldDefClient : m_OldCurClient;
		CString newclient = GET_P4REGPTR()->GetP4Client((BOOL)wParam);
		CString curclient = GET_P4REGPTR()->GetP4Client();
		CString defclient = GET_P4REGPTR()->GetP4Client(TRUE);
		LV_ITEM lvItem;
		lvItem.mask = LVIF_IMAGE;
		lvItem.iSubItem = 0;
		lvItem.state = lvItem.stateMask = 0;

		lvItem.iItem = FindInList(oldclient);
		if(lvItem.iItem > -1)
		{
			lvItem.iImage = CP4ViewImageList::GetClientIndex(false,
				oldclient == defclient);
			SetItem(&lvItem );
		}

		lvItem.iItem = FindInList(newclient);
		if(lvItem.iItem > -1)
		{
	        lvItem.iImage = CP4ViewImageList::GetClientIndex(true,
				newclient == defclient);
			SetItem(&lvItem );
		}
		else if (GET_P4REGPTR()->GetClientFilteredFlags())
		{
			int index = FindInListAll(newclient);
			if (index > -1)
			{
				CP4Client * client = new CP4Client;
				client->Create(m_ListAll.column[CLIENT_NAME].GetAt(index),
							  m_ListAll.column[CLIENT_OWNER].GetAt(index),
							  m_ListAll.column[CLIENT_HOST].GetAt(index),
							  m_ListAll.column[CLIENT_ACCESSDATE].GetAt(index),
							  m_ListAll.column[CLIENT_ROOT].GetAt(index),
							  m_ListAll.column[CLIENT_DESC].GetAt(index));
				m_ListAll.column[0].SetAt(index, _T("@@"));	// Removes from list of all clients
				InsertClient(client, GetItemCount(), &curclient, &defclient);
				ReSort();
			}
		}
		if (wParam)
			m_OldDefClient = newclient;
		else
			m_OldCurClient = newclient;
	}
}

void CClientListCtrl::OnPerforceOptions()
{
	MainFrame()->OnPerforceOptions(TRUE, FALSE, IDS_PAGE_CLIENT);
}

void CClientListCtrl::OnUpdateDiff2Clients(CCmdUI* pCmdUI)
{
	// For now this feature is permanently turned off
	// Remove the 'FALSE' and the /* */ to turn on again
	//
	// However for now this feature just uses File > Diff 2
	// If this is going out, the Client menu should have Diff 2
	pCmdUI->Enable( FALSE /*!SERVER_BUSY()*/ );
}

void CClientListCtrl::OnDiff2Clients()
{
	CDiff2ObjsDlg dlg;
	dlg.m_Type = COMBO_CLIENT;
	m_Active=GetSelectedItemText();
	if (!m_Active.IsEmpty())
		dlg.m_Edit1 = m_Active;
	SET_APP_HALTED(TRUE);
	int rc=dlg.DoModal();
	SET_APP_HALTED(FALSE);
	if (rc == IDOK)
	{
		CString x = "";
		CCmd_Diff2 *pCmd= new CCmd_Diff2;
		pCmd->Init( m_depotWnd, RUN_ASYNC);
		pCmd->SetOutput2Dlg(GET_P4REGPTR()->Diff2InDialog());
		if( pCmd->Run( _T("//...@") + dlg.m_Edit1, _T("//...@") + dlg.m_Edit2,
						0, 0, x, x, FALSE, FALSE, TRUE) )
			MainFrame()->UpdateStatus( LoadStringResource(IDS_DIFFING_FILES) );
		else
			delete pCmd;
	}
}

void CClientListCtrl::OnUpdateFilterClients(CCmdUI* pCmdUI)
{
	pCmdUI->Enable( MainFrame()->SetMenuIcon(pCmdUI, !SERVER_BUSY()) );
}

void CClientListCtrl::OnFilterClients()
{
	CClientFilterDlg dlg;
	if(dlg.DoModal() == IDCANCEL)
		return;
	OnViewUpdate();
}

void CClientListCtrl::OnUpdateClearClientFilter(CCmdUI* pCmdUI)
{
	pCmdUI->Enable( MainFrame()->SetMenuIcon(pCmdUI, !SERVER_BUSY()
					&& GET_P4REGPTR()->GetClientFilteredFlags()) );
}

void CClientListCtrl::OnClearClientFilter()
{
	GET_P4REGPTR()->SetClientFilteredFlags(0);
	OnViewUpdate();
}

redpajama_set_name: RedPajamaGithub


Keith Edgar is a Senior Consulting Associate with CAP Resources and is a specialist in project finance, financial modeling, acquisition structuring and analysis, and joint venture development. Particular strengths include complex modeling in upstream, midstream, downstream and renewable energy asset development projects, generally, in support of private equity and investment banking initiatives. Recent project examples include modeling of pipelines, natural gas storage, biomass manufacturing facilities, and storage and export projects.
Keith is currently the Financial Advisor to the City of Houston Mayor's Office for the proposed "One Bin for All" recycling program. In this capacity his responsibilities have included comparative analysis and audit of financial models submitted by competing project developers in response to the City's request for proposal process.
Keith has over 20 years of experience in a broad variety of positions related to equity and fixed income capital markets for leading East Coast broker/dealers. He began his career in 1988 in institutional sales and trading of fixed income mortgage derivative products, trading in excess of $1.0 billion in market value for money managers and insurance companies. Expertise includes security and portfolio analysis, risk and asset allocation, and market data systems integration. During his tenure as the Director of Portfolio Strategies Group for the Bank of Texas, he developed portfolio modeling and risk management scenario analysis reporting tools for structured products including CMO's, ABS and CDO securities.
Keith is actively involved in civic leadership as a board member of the City of Houston Advisory Committee, and is also the Founder and President of the Association of Washington Avenue Neighbors, where he contributed to multi-party creative financing methods which enabled a number of community-focused initiatives including reforestation.
Mr. Edgar was granted a BBA in Finance from Sam Houston State University, has passed Level 1 of the CFA exam, and has earned the FINRA Series 7, 63 and 65 licenses. He is a member of the CFA Society of Houston and the CFA Institute.


Any fiber geek loves their natural dyes, but have you ever thought you might be helping the planet with them? Learn how to reduce food waste with these vegetable dyes made right from your compost bin. No special materials, no expensive ingredients – just rummage around your kitchen to make these natural dyes. Plus, read our review of Natural Color by Sasha Duerr and be inspired to make even more vegetable dyes!


They shared the money: Troy-sales person, Karl-financial Guy, Mike-manager and the boss of this nice "family"
SCAM ! SCAM! SCAM ! SCAM ! SCAM!
your fault that you didn't read the paperwork before you signed it.
where do you live? here in NY I believe any contract worth over a couple hundred dollars has a 3 day period for you to have a lawyer take a look at it and accept or reject it.


You'll appreciate its safety and convenience features! A turbocharger is also included as an economical means of increasing performance. All of the premium features expected of a Mercedes-Benz are offered, including: a blind spot monitoring system, power windows, and power front seats. Mercedes-Benz made sure to keep road-handling and sportiness at the top of it's priority list. It features a front-wheel-drive platform, an automatic transmission, and a 2 liter 4 cylinder engine.


If you are on the lookout for a locksmith company that can help you with your locksmith dilemmas, make sure to give a look to our company. Our well trained and skilled locksmith technicians will help you in deciding and installing the most fitted and applicable security measure you could have. Equipped with the best tools and equipment for the job, they offer a wide variety of services for you. Our staff will make sure to reply to your questions and concerns regarding with the services we offer.
We provide services such that we'll be servicing commercial, residential, and automotive clients. We will not slash your wallet. We provide affordable rate in all our services. Count on the help and guidance of our staffs on various matters pertaining to customer safety. You can reach us anytime because we are a 24/7 company that can give your requested services the same day you called. We've also got prompt and quick responding customer support to answer you calls and give you free estimates. Contact us now! We are very capable and also certified to help you out.


Our sandwiches have been created with unique flavour combinations that express who we are.
Each sandwich is made fresh to order every time.
We offer meals that come with your choice of any side item to compliment your sandwich.


Bittersweet Chocolate Orange Balsamic Vinegar is scrumptious! Rich, decadent bittersweet chocolate with an overlay of luscious fresh picked orange flavor. Quickly developing a devoted following! Use it on fresh fruit, grilled steaks, barbequed chicken, ribs, cakes, the list is endless.


Fury & Son has a new beer coming for the latter part of winter. It's a red ale and they're unleashing it as part of a five course degustation at Cargo.
Each of the brewery's five beers – Pale, Pilsner, Scotch Ale, IPA and the newcomer – will be paired with a dish from the Docklands' venue's kitchen, with the brewery team on hand to talk about their beers and future plans.
The menu won't be revealed until the night but we can tell you a little about the Red Ale.
According to Fury & Son, it's "A classic American red ale, delivering strong citrus and pine needle aromas over a solid biscuity and caramel malt backbone. A full-bodied yet sessionable beer finished with a crisp dry bitterness."
If you fancy a beer dinner while enjoying views of the Melbourne city skyline, tickets are $70pp and can be booked here.
The Fury & Son team has given us a pair of tickets for the dinner to give away to one lucky Crafty supporter.
Crafty Cabal members can head into their member's area to enter the ballot. We'll pick a winner on August 16 and notify them via email. See our competition ts & cs here.


I find myself hiding or inventing meetings so I can avoid being part of this Friday circus of embarrassment. How do I just tell them that the reason I no longer go along is their curmudgeonly displays of creepiness?
I feel his going without me is a negative commentary on his feelings for me and our marriage. He doesn't see it that way at all. What is your opinion?


Owning a piece of land and home is a big responsibility, which includes home upkeep. In order to be sure that your place is in good working order, occasional home inspections are wise. This way, any troubles can be found and repaired early on, saving you money!
Before you purchase a house, it is important that you have a complete inspection done so you know the exact condition of the home. Promptly tend to any needed repairs that the previous owner did not and make note of the other issues that were discovered.
Remember that water damage is a serious problem that can harm far more than your utility bill. Every aspect of your home can suffer from a chronic water issue.
This is just one of the things that a home inspection will reveal. Not only will the inspector check for damage, the inspection will make sure that your plumbing and electrical work are operating well.
In fact, the specifics of your inspection will depend on multiple factors. Make sure that you understand exactly what is and is not included in the inspection. After all, if you are able to save money but have a less thorough inspection, you have not truly saved.
In addition to having your home inspected prior to purchase, you should have a complete inspection every few years. The frequency will depend on multiple factors, such as the age of your home and your local climate. Newer properties will require less frequent checks than older homes.
Repair detected problems immediately. Otherwise, the quality and value of your home will slowly decline over time. Eventually, you will have too many repairs to make and be unable to fully enjoy the value your home once possessed.
If you do not have experience with home repair, you might want to find property maintenance experts in your community that you can rely on when needed. Plumbers, electricians and other contractors are available to help you keep your home up to code and comfortable for you and your family.
When seeking out qualified contractors to assist you with your property maintenance needs, look for those with good reputations locally and online. Talk to people that you know and ask for references. Make note also of which professionals to avoid.
Look for reviews online of any contractor you are considering. This way, you can find out if they complete the jobs on time, stay within budget and other concerns that you might have regarding the job.
If you want to enjoy your home for many decades to come, then you need to take good care of it along the way. Regular inspections and routine maintenance tasks are a vital aspect of your home care. Remember to use verifiable contractors for everything from the inspection to the repairs.
Thanks to your regular maintenance, your house will look great and provide a safe haven from the world for you and your family for a long time to come!


Dictators and Democracy in African Development: The Political Economy of Good Governance in Nigeria PDF author's ebook, which is A. Carl LeVan, offered to buy the publisher Cambridge University Press to 17 USD euros per copy. At 07.08.2014, the ebook was a personal - and the following PDF ISBN (9781107081147) formats available for free reading on mobile devices and for Its discharge. Assemble freely and gain unlimited access, not only to the Dictators and Democracy in African Development: The Political Economy of Good Governance in Nigeria PDF ebook, but also to other materials. Download Dictators and Democracy in African Development: The Political Economy of Good Governance in Nigeria PDF for free now.
Download "Dictators and Democracy in African Development: The Political Economy of Good Governance in Nigeria"


Swelling is a normal occurrence after surgery, but often does not occur with this procedure. The doctor will inform you of expectations for your individual case. To minimize swelling, apply an ice bag or a plastic bag or towel filled with ice cubes on the cheek in the area of surgery. Apply the ice continuously as much as possible for the first 36 hours.
You should begin taking the pain medication as directed by the doctor immediately upon returning home. Use over the counter medication as instructed by doctor. If prescribed pain medication, it will make you groggy and slow down your reflexes. Do not drive an automobile or work around machinery. Avoid alcoholic beverages. Pain or discomfort following surgery should subside more and more each day. If pain increases or persists, call the office.
Mouth cleanliness is essential to good healing. No rinsing of any kind should be performed the day of surgery. You can brush your teeth on the night of surgery, but do not rinse. At this time, you can use the prescribed anti-bacterial solution, but do not swish. The day following surgery you can use the solution as instructed on the bottle.


text:
MABRUQQ
Book A Ride With The Best Car Rental Companies in UAE
Mabruqq's Editor TRAVEL Aug 29, 2020
Planning a trip to Dubai is much more than a simple task of packing your bags and sightseeing around. With hundreds and thousands of tourist spots and activities to do in Dubai, we are limited to a few because of the connectivity of metro, buses, and trams around the region. Car rental is one such solution to all traveling snags in Dubai and provides flexibility in far-reaching places.
All you have to do is rent a car from the list of reliable companies, select the vehicle of your choice, how long you want to rent the car, and pay the rental accordingly. Car Rental service is highly recommended for a tourist group of at least 8 members or above.
TOP CAR RENTAL COMPANIES IN DUBAI YOU CAN OPT
Dubai, being a business hub in the whole of the GCC and all over the world has open doors of opportunity for businessmen and companies. This has led to an increase in business prospects in every vertical. The latest in the news is Car Rental. Even on a well-networked public transport system like Dubai, Car Rentals have been doing well with people preferring to opt for a vehicle at their disposal. Car Rental services can also be utilized by Emirati residents for a longer or shorter duration like a few weeks or months with a vehicle of their choice.
Here is the list of Top Car Rental companies in Dubai offering everything from standard and luxury vehicles, to chauffeur services, to affordable rates, to a long-term rental facility, up-gradations, and more.
A quick and reliable car rental service with 12 locations across the city. Hertz is people's favourite car rental platform that explains everything from documentation to driving regulations, routes, pick-up locations and reservations. Hertz has a wide range of latest cars available for rental which also covers theft and damage. Extra benefits include no-cancellation fees up to 2 days before collecting your vehicle.
Website- https://www.hertz.ae/
Locations: Dubai, Abu Dhabi, Sharjah, Fujairah, Ras Al Khaimah, Al Ain
Email: Hertz.custrelations@Hertz.ae
Toll Free: +971 4 2060206; +971 4 2060216
Diamond Lease
Drive easy with seamless rental services from Diamond Lease. Serving the region since 1996, they have over 7000 cars in their inventory which consist of hatchbacks, sedan, SUVs, pick-up buses, trucks, refrigerated containers trucks, 4X4 at very reasonable prices. Being a subsidiary of the Al Habtoor group, it also offers pre-owned cars for sale, school bus transport, outbound rentals, and more.
Website - https://www.diamondlease.com/
Locations: Dubai, Abu Dhabi, Sharjah, Fujairah, Ras Al Khaimah
Email: sales.dip@diamondlease.com
Toll Free: +971 4885 2677
The American car rental agency is one of the most trusted organizations among UAE citizens. National Car Rental has an extensive vehicle range starting from Ford Figo to mid-size Ford Escape to SUVs like Ford Edge and luxury offerings like Range Rover, Aston Martin, Lincoln, Maserati, Mustang, and cargos that suit all corporate, personal, and commercial needs.
Website: https://www.national-ae.com/en
Locations: Dubai, Abu Dhabi, Al Ain, Sharjah, Fujairah
Toll Free: 800 3031/3130; +971 4 2516211
Email: ncrauhmo@national-ae.com
Rental Cars UAE
An innovative platform that allows you to search and compare cars for rent in different locations across the UAE. Rentalcarsuae offers you rent as low as 33 AED for per day for small cars. Choose from different weekly, monthly, and daily packages along with frequently booked cars and get instant 30% discount on first car rental. Rentalcarsuae has over 100 locations across the region and you can choose your pick-up location and the car will be brought to your doorstep.
Website: https://rentalcarsuae.com/
Locations: Dubai, Abu Dhabi, Sharjah, Fujairah, Al Ain
Toll Free: (+971) 80022799
Email: info@rentalcarsuae.com
Thrifty car rental was established in UAE in the year 1989 and has been in the service for more than 3 decades. Thrifty has over 52 locations in parts of UAE and is open 24x7 at Dubai, Sharjah, and Abu Dhabi international airports. Thrifty benefits the consumer by offering them flat 7% off on when they book online on all segments of vehicles.
Website: https://www.thriftyuae.com/
Locations: Dubai, Abu Dhabi, Ajman, Al Ain, Fujairah, Ras Al Khaimah, Sharjah
Email: rez@thriftyuae.ae ; adrez@thriftyuae.ae
Toll Free: +971 800-701; +971 800-4770
OneClickDrive
One Click Drive is your ideal portal to find the best offers on budgeted car rentals, luxury car rentals, sports car rental, and chauffeurs. Book cars with on-demand services and no commission, no mark-ups, and no booking fees. Whatever you need, One Click Drive has it.
Website: https://www.oneclickdrive.com/
Locations: Dubai, Abu Dhabi, Ajman, Fujairah, Ras Al Khaimah, Sharjah
Toll Free: +971 52 616 0868
Europcar Dubai
Move your way smoothly through the streets and highways of Dubai and explore the region in the best collection of rentals cars available at Europcar. Europcar offers competitive rates on both compact as well as luxury rides with payment flexibility. Become a loyalty member and avail discounts, free hires, and priority check-ins.
Website: https://www.europcardubai.com/
Locations: Dubai, Sharjah, Jebel Ali, Ras Al Khaimah
Email: reservations@europcar.ae
Toll Free: +971 4 506 3000
Budget UAE Car & Van Rental
Budget UAE offers you the best value on every vehicle in its fleet. Well known for its commitment to quality, reliability, and value for money, Budget UAE rental cars are usually less than a year old, well-maintained, and undergo service checks before the delivery. They also provide you 24-hour road assistance in cases of unfortunate breakdowns. Install the app and start renting cars at the cheapest prices.
Website: https://www.budget-uae.com/
Locations: Abu Dhabi, Dubai, Sharjah
Toll Free: 800 2722 or +971(0) 4 88 40022
Email: care@budget-uae.com
Experience the Emirati land in style with affordable car rentals from Sixt. Here, you can find leading brands like Mercedes, BMW, Audi, Range Rover, Jeep, Chevrolet and different car segments like compact cars to sedans to sports SUVs, executive cars, coupe, convertible, and more. Rent a car from Sixt and get behind the wheels to add a fun vibe to your trip.
Website: https://www.sixt.ae/
Locations: Dubai, Sharjah, Abu Dhabi
Toll Free: +971 8007498
Email: customerservice@sixt-uae.ae
The economical car rental service in UAE with prices starting at just 44 AED per day. Dollar Rent a Car service operates in over 53 countries with 650 locations worldwide and houses over 200,000 standard and luxury wheels. Being felicitated with the Dubai service excellence scheme award, they offer you the best advice to what car to choose, time duration, special discounts, cost-saving options, and hassle-free service.
Website: https://www.dollaruae.com/
Locations: Dubai, Sharjah, Abu Dhabi, Al Ain
Toll Free: +971 4 3365065
Email: makeabooking@dollaruae.ae & customer.care@dollaruae.ae
UAE best dubai blogs uae travel car rental dubai top car rental companies in uae
Travel Booking Guide: Hacks To Save Money Online On Traveling
Best Budgeted Hotels in Dubai: 15 Best With Panoramic Views
Travel Bucket List 2020: Where To Go in Second Half Of The Year
© 2020 All Rights Reserved Mabruqq

redpajama_set_name: RedPajamaCommonCrawl


text:
Royce Da 5'9″, DJ Premier & Adrian Younge Break Down Their "PRhyme" Project (Video)
Exclusive: R.I.P. D&D/HeadQCourterz Studios (1984 – 2014)
Fuck! Crazy news from 320 west 37th Street, Manhatten aka HeadQCourterz Studios, formerly known as the legendary D&D Studios. Exactly 30 years after D&D was founded by Douglas Grama and David Lotwin it has to close its doors. It's known thanks to the artists that recorded music at the studios like Madonna, Dee-Lite, Foxy Brown, The Notorious B.I.G., Nas, Jay-Z, Jeru The Damaja, KRS-One, Big L, Joe Budden, and Black Moon, among others. But its mostly known as the home studio of DJ Premier.
But in 2003 D&D closed and nobody was prepared to take it over except DJ Premier & Charles Roane, I remember him saying it was a risky choice because there was a lot of money involved and I think he even had to sell his house. But he followed his heart and bought it. I also remember he held in 2003 a big sale because it needed renovation for HeadQcourterz Studios. He renamed the studio to a fallen friend of him.
And now after 30 years some rich investor bought up the whole building to put apartments in it. Not many details are available but DJ Premier stays there till the end of 2014. And no word on what will happen with the studio next, but I'm sure this is not the end… Only the end at the legendary 320 west 37th Street. DJ Premier planning on leaving the building with a farewell documentary that goes along with an album. Would be dope with the former D&D artists on it! …Sad day for hip hop…
I wrote various articles about the studio in my blogging history, check:
History behind HeadQcourterz Studios
Tales From D&D Studios
HEAD UP EYES AND EARS OPEN, WORD IS BOND!!
DJ Premier Mentions BDP's "Criminal Minded" as Best Album of All Time
@Medowalid68 @OnlyHipHopFacts @Royceda59 Boogie Down Productions "Criminal Minded"
— DJ Premier (@REALDJPREMIER) November 23, 2014
Related: DJ Premier's Top 20 Hip Hop Songs of 2013
PRhyme (DJ Premier & Royce da 5'9″) – Courtesy (Music Video)
gimantalon, November 24th 2014 | Posted in Clips
Live From HeadQCourterz (09/26/2014)
gimantalon, November 24th 2014 | Posted in LiveFromHQ


Thursday morning whilst I was sipping my hot chocolate and preparing myself for the day ahead, I received an email from the CEO and co-founder of the Tour de Cure, Samantha Hollier-James. I was fortunate enough to interview Samantha over the phone 15 minutes after receiving her email, but not before she got the chance to interview me about my love for cycling. She was interested in knowing why I had a passion for the sport and if I ever planned on riding the Tour de Cure myself one day, in which the answer was of course. Out of the 45+ interviews I have written over the past three years, this has been my favourite. I think it's wonderful that there are people out there so willing to help raise funds for cancer research just like Samantha.
Ellie: Are you pleased with how this year's Tour went?
Samantha: Absolutely. Every year it is an epic team effort and the outcome is always spectacular. It's incredible to see how many people become interested when raising funds for cancer is involved.
ES: Did you ride the Tour this year?
SHJ: I don't ride but the co-founder rides along with other members of the team. There are hard-working jobs to do on and off the bike, so that's where my role comes into the fundraiser. Off the bike jobs are harder to do, but I am very proud of the support crew and all are proud to be a part of the team. We have a team of riders and a support crew including 148 people with 17 Tour de Cure vehicles.
ES: What's your favourite aspect of the Tour de Cure?
SHJ: My favourite aspect is the families. When they join the first year stages it's very special and the excitement to reunite with family after such a great experience is incredible. So many emotions come from the riders and the families once the Tour is over.
ES: Would you be able to tell me about the next ride, the State of Origin Country Tour coming up in September?
SHJ: This is one of our new initiatives that started in 2012 and its purpose is to tackle and improve original statistics. We created a 4 day country tour – particularly for kids – through Queensland and New South Wales. With 2,500 kids in the region, it has been successful and raised many funds since it began two years ago.
ES: How can we become more involved with supporting the Tour here in Tasmania?
SHJ: There are projects online that we need help with and anyone across the world can become involved. You can read more at our website.


What does it take to design predictable PCB or packaging interconnects operating at tens of Gbps? Properly identified dielectric and conductor roughness models, known manufacturer geometry adjustments, and properly validated simulation tools are necessary conditions. One of the sufficient conditions is the localization property; to be predictable, all elements of an interconnect link must be localized up to a target frequency. This article introduces and illustrates the localization concept, with the power-flow density computed using the unique Trefftz finite element solver available in Simbeor THz software.
Ideally, all interconnects should look like uniform transmission lines (or wave-guiding structures) with the specified characteristic impedance. In reality, an interconnect link is typically composed of transmission lines of different types (microstrip, strip, coplanar, coaxial, etc.) and transitions between them such as vias, connectors, breakouts and so on. Transmission lines may be coupled to each other that cause crosstalk. The transitions may reflect and radiate energy due to discontinuities in signal and reference conductors. The crosstalk, reflections and radiation cause unwanted and sometime unpredictable signal degradation. If analysis of traces or via hole transitions is possible in isolation from the rest of the board up to a target frequency, the structure is called localized. Structures with behavior that is dependent on other structures and board geometry are called not localized, and they should not be used in multi-gigabit interconnects in general.
Examples of non-localized structures are coupled traces, striplines with non-connected reference planes, traces crossing gaps in reference planes, vias with far, no or insufficient stitching vias (vias connecting reference planes of the connected traces). Analysis of non-localized structures is usually possible only at the post-layout stage with substantial model simplifications that degrade accuracy at higher frequencies. To design predictable interconnects, only localized structures must be used—this is one of the most important elements for design success. The localization is always bandwidth limited for striplines (two reference conductors) and for vias (two or more reference conductors). How do we estimate the localization property of a transition? One way is to run an electromagnetic analysis of the structure with different boundary conditions or simply change simulation area size without changing phase reference planes and evaluate the differences in the computed S-parameters. If the difference is small, the structure may be considered localized and suitable for final design.
Serpentine is a technique to minimize skew or misalignment of differential pairs. The number of segments and intra-pair spacing of serpentining impacts the high-speed signal transmission. As the intra-pair gap is enlarged for serpentining, the characteristic impedance of the PCB trace in differential mode will rise. This leads to impedance discontinuity, signal reflection, and ultimately, attenuation. The signal attenuation is heavily dependent on the number of segments and intra-pair spacing of the serpentine.
In an electronic system, the signal transmission exists in a closed-loop form. The forward current propagates from transmitter to receiver through the signal trace. On the other hand, for a single PCB, the return current travels backward from receiver to transmitter through the ground plane closest to the signal trace. Meanwhile, for multi-board interconnect (e.g., connectivity through flex or ribbon cable), the return current travels back to the transmitter through the ground or return wire, preferably as close as possible to the signal wire. The path of forward current and return current forms a loop inductance.


Western Asset's portfolio manager Mark Lindbloom and Aberdeen Asset Management's head of global banks Rennie McConnochie weigh in on the global market space for the remainder of 2017 and provide their outlooks for 2018.
Q: How is the global market performing and what is your outlook for 2017?
Q: How does this growth compare to years prior?
Q: How would you gauge risk in the coming months and what other challenges and opportunities lay ahead?
Q: Any final thoughts for readers?


I rode on a bus.
It was a weekday afternoon. The bus was filled with old men and women, and it takes time for people to get on and off the bus. The bus gradually gets delayed from schedule, but nobody seems to care. In the first place, is there any reason to worry about it? The time seems to be flowing slowly inside this old bus.
The bus stop that I arrived after a two hour ride was located on a hill facing an ocean. Under a strong, flashing sunlight, a shadow of an island can be seen beyond the cobalt blue colored ocean. The artist who lives in this area motivated me to go on a mini journey that involves a bus. The artist makes works by using natural materials as its motif and has moved here half a year ago.
I asked him to decorate my TRAVELER'S notebook, which has turned into my traveling partner. The notebook is wrapped using a rope made of soft and firm deer leather. The rope is bounded using a bean called "Ilkanda," which was picked from the location the artist lives. As a bookmark, a string made of hemp that has a same color as the ocean was attached. The string was decorated with turquoise and a rice bead made of brass. Through his artwork, I can sense a pleasant breeze flowing in and smell the land.
It was just a two hour stay. I rode on the same bus again.
From the window, I can see a sunset pouring a soft and warm light.
Whenever I travel alone, I take notes frequently.
I tend to travel to remote regions, and whenever I eat at local food stands alone, I always feel lonely. To distract this feeling, I just write.
One thing I realize when traveling alone is that in a situation like this, it makes people take notes in a truthful manner.
When we eat or walk around, things that come up to our mind and motivates us to take notes tend to fade away as time proceeds.
That's why I write at that moment. Just a little would do. The things that flashes through our minds will not be recorded in a photo. That's why writing is important.
This time, I went to Okinawa by myself. I was able to make myself a spare time for half a day so I visited an artist who I know to see if I can find any parts to decorate my TRAVELER'S notebook. This mobility is one of the beauties of traveling alone.
Born in 1962 at Nagano Prefecture.
Travels around the world from altitude of 6000m to 40 meters below sea level.
Has written works such as Supiti-no-Tani-e (Shinchosha), Ai-no-Sora, Yuki-no-Shima (Switch Publishing), etc.
On April 2009, he moved from downtown Tokyo to the Tama district, and published "Triathlon Trip," a magazine that features triathlon. He is the editor in chief of this magazine.


Above: Nikon D5100 with 18-55mm lens. This image was created by converting the file into three separate exposure values before exporting to Photomatix HDR software, for exposure fusion and tone mapping. Further processing was done using Photoshop.
I've saved a selection of the best High Dynamic Range (HDR) 'tone mapping' images at my Flickr favorites. They're about the best examples, with respects to processing skill, photographic subject and composition, that I've personally found in the genre. Most of the photographers represented there show a large body of professional work that's worth exploring a little further. To gain more insight into the process of HDR, in general terms. Furthermore, they represent the level at which I'm striving to achieve, with my current work. Although, my camera, a Nikon Coolpix is letting me down, with lesser image clarity, the quality needed to produce the sharpness and resolution most of these guys are working with, in RAW format; like the top of the range Nikon or Canon with professional lenses are able to produce. Nevertheless, it's still possible to create HDR with my current set-up - lets look at my process.
My Tone Mapping Process: My current production method, also-known-as, "Unsharp Masking": using a standard image editing package with .jpeg image format. This is a technique that doesn't require RAW, and one to which I add other filter processes: Hue & Saturation, Threshold, Contrast, Blur and Invert to gain results. These standard filters are found in most free or professional software packages, such as Photoshop or Elements. Personally, constrained to a lower quality .jpeg with my camera, I've nevertheless developed a work-flow process that produces results over 30-50 layers. Including 5-10 layer compressions, over all. This helps to gain a detailed, yet highly-dynamic end result by using the image as a template, to render one layer at a time.
It's a little like chemistry: you've got to believe in the photographs ability to produce results using this method. Key in on image details, and contrasts in colour and light, in the original image. It's also important to take into consideration the image composition in order for the process to show an extraordinary end results. As it takes about 20 layers and three+ layer compressions before you start to see areas of clear definition in tone and contrast forming in specific areas of your image - Unsharp Masking alone is not enough to produce professional results. In the end, using this process depends upon which areas of the original image show the potential for the process to give you the clearest results possible, like details and colour contrasts. So, it's important to be aware of how this might change your original composition depending on how your image takes to the process.
Yes, there's software that produces good quality results, relatively easily. I find that using Photmatix can help, nevertheless the resulting HDR image is usually layered into my project using a layer transparency of 50%, or less. In some of my images I use Photomatix to merge differing exposures values (E/V) and apply Tone Mapping. Although, my manual technique gives your image the edge over most of these processes - or in combination - with respects to each image supporting its own unique personality and subtle differences, while also producing a uniformly inherent quality.


text:
Dom Duarte de Menezes (before 1488 – after 1539), was a 16th-century Portuguese nobleman and colonial officer, governor of Tangier from 1508 to 1521 and 1536 to 1539, and governor of Portuguese India from 1522 to 1524.

Background

D. Duarte de Menezes was the eldest son of the powerful noble D. João de Meneses, 1st Count of Tarouca and Prior of Crato, and his wife D. Joana de Vilhena. He was named after his renowned grandfather, Duarte de Menezes, 3rd Count of Viana, captain of Alcácer-Ceguer.

Tangier

In 1508, Duarte de Menezes succeeded his father as Portuguese captain of Tangier, a function he had already been effectively performing in his father's name since 1507. He carved out a formidable reputation as a military leader in numerous engagements around Tangier.

India

In 1521, D. Duarte de Menezes was named by King Manuel I of Portugal as the next governor of Portuguese India, succeeding Diogo Lopes de Sequeira. Duarte de Menezes left Lisbon in April, 1521, with an armada of 11 carracks destined for India. He was accompanied by his brother D. Luís de Menezes, who captained one of the ships. On the outgoing leg, Menezes's armada was joined by a squadron of four ships, commanded by Martim Afonso de Mello, destined for China. Menezes's armada arrived in Goa at the end of August, 1521. He assumed office in early 1522, upon the departure of his predecessor.

D. Duarte de Menezes tenure as governor was considered disastrous. Accused of corruption, he was arrested by his successor, Vasco da Gama, in 1524, and sent back to Portugal. He was imprisoned for nearly seven years in the castle of Torres Vedras, before being finally released by the intercession of powerful friends including D. António de Ataíde, Count of Castanheira.

Tangier again

The rehabilitation of Duarte de Menezes was sufficiently complete that in October 1536, he managed to be appointed to his old post as governor of Tangier. He held that post until January, 1539, when he handed over the government to his son, D. João de Meneses.

Duarte de Menezes lived out the remainder of his days in Portugal.

References

The Rise of Portuguese Power in India (1497–1550), p. 199
História de Tânger durante la dominacion portuguesa, by D. Fernando de Menezes, conde de la Ericeira, etc. traduccion del R. P. Buanaventura Diaz, O.F.M., Misionero del Vicariato apostólico de Marruecos. Lisboa Occidental. Imprenta Ferreiriana. 1732.
 Ignacio da Costa Quintella (1839) Annaes da Marinha Portugueza, Vol. 1, Lisbon: Academia Real das Sciencias.
The career and legend of Vasco da Gama, Sanjay Subrahmahnyam, Cambridge University Press, 1997.

External links
 genealogy of D. Duarte de Menezes at geneall.com

Maritime history of Portugal
Viceroys of Portuguese India
History of Kerala
Portuguese colonial governors and administrators
Portuguese nobility
15th-century births
16th-century deaths
Governors of Tangier