void MyActiveSelectionObserver::styleCharaPara()
{
	do
	{
		/*
		InterfacePtr<IDocument> document(this, UseDefaultIID());
		if (!document)						{	CAlert::InformationAlert("document Failed:");					break;	}

		IDataBase* database = ::GetDataBase(document);


		CAlert::InformationAlert("--------------222-------------------");
		//UIDRef wsRef=document->GetDocWorkSpace();
		//InterfacePtr<IWorkspace> ws(document->GetDocWorkSpace(), UseDefaultIID());
		InterfacePtr<IWorkspace> ws(GetExecutionContextSession()->QueryWorkspace());
		if(!ws)		{	CAlert::InformationAlert("ws failed");	break;	}


		InterfacePtr<IStyleNameTable> styleNameTable(ws, IID_IPARASTYLENAMETABLE);
		if(!styleNameTable)		{	CAlert::InformationAlert("styleNameTable failed");	break;	}

		int32 styleNum=styleNameTable->GetNumStyles();
		for(int32 i=0;i<styleNum;i++)
		{
		CAlert::InformationAlert("--------------333-------------------");
		UID styleUID=styleNameTable->GetNthStyle(i);
		InterfacePtr<IStyleInfo> styleInfo(database,styleUID, UseDefaultIID());
		if(!styleInfo)		{	CAlert::InformationAlert("styleInfo failed");	break;	}

		PMString paraStyleName=styleInfo->GetName();
		CAlert::InformationAlert("paraStyleName is:"+paraStyleName);
		}
		*/

		/*
		//UIDRef wsRef=document->GetDocWorkSpace();
		//InterfacePtr<IWorkspace> ws(document->GetDocWorkSpace(), UseDefaultIID());
		//InterfacePtr<IWorkspace> ws(GetExecutionContextSession()->QueryWorkspace());
		IActiveContext *context = GetExecutionContextSession()->GetActiveContext();

		IWorkspace* ws = context->GetContextWorkspace();
		if(!ws)		{	CAlert::InformationAlert("ws failed");	break;	}


		InterfacePtr<IStyleNameTable> styleNameTable(ws, IID_IPARASTYLENAMETABLE);//ICHARSTYLENAMETABLE_OBSOLETE
		//InterfacePtr<IStyleGroupManager> styleNameTable(document->GetDocWorkSpace(), IID_ICHARSTYLEGROUPMANAGER);
		if(!styleNameTable)		{	CAlert::InformationAlert("styleNameTable failed");	break;	}

		int32 styleNum=styleNameTable->GetNumStyles();
		PMString styleNumString;
		styleNumString.AppendNumber(styleNum);
		CAlert::InformationAlert("paraStyle count is:"+styleNumString);

		for(int32 i=0;i<styleNum;i++)
		{

		UID styleUID=styleNameTable->GetNthStyle(i);

		//UID rootStyleUID=styleNameTable->GetRootStyleUID();
		//InterfacePtr<IStyleInfo> styleInfo(database,styleUID, UseDefaultIID());
		InterfacePtr<IStyleInfo> styleInfo(::GetDataBase(styleNameTable),styleUID,UseDefaultIID());
		if(!styleInfo)		{	CAlert::InformationAlert("styleInfo failed");	break;	}
		bool16 res=styleInfo->IsParagraphStyle();
		if(res==kTrue)
		{
		CAlert::InformationAlert("IsParagraphStyle :");
		}

		PMString paraStyleName=styleInfo->GetName();
		CAlert::InformationAlert("paraStyleName is:"+paraStyleName);
		}
		*/

		InterfacePtr<ITextSelectionSuite> iTextSelectionSuite(fCurrentSelection, UseDefaultIID());
		if (!iTextSelectionSuite)			{	CAlert::InformationAlert("iTextSelectionSuite Failed:");		break;	}


		InterfacePtr<const IIntegratorTarget> iIntegratorTarget_text(iTextSelectionSuite, UseDefaultIID());
		if(iIntegratorTarget_text == nil)
		{	return;	}

		RangeData rangeData(0,RangeData::kLeanForward);
		UIDRef textRef;

		/*
		InterfacePtr<ILayoutSelectionSuite> iLayoutSelectionSuite(fCurrentSelection, UseDefaultIID());
		if (!iLayoutSelectionSuite)			{	CAlert::InformationAlert("compScanner Failed is :");			break;	}


		InterfacePtr<const IIntegratorTarget> iIntegratorTarget_layout(iLayoutSelectionSuite, UseDefaultIID());
		if(!iIntegratorTarget_layout)		{	CAlert::InformationAlert("iIntegratorTarget_layout failed");	break;	}

		//std::auto_ptr<IIntegratorTarget::TargetSuiteCollection> selectionSuites_layout(iIntegratorTarget_layout->GetTarget(ILayoutTarget::kDefaultIID));
		*/

		std::auto_ptr<IIntegratorTarget::TargetSuiteCollection> selectionSuites_text(iIntegratorTarget_text->GetTarget(ITextTarget::kDefaultIID));
		for(IIntegratorTarget::TargetSuiteCollection::size_type i = 0; i < selectionSuites_text->size(); i++)
		{
			ITextTarget* textTarget = (ITextTarget*)selectionSuites_text->at(i).get();
			if(!textTarget)
				continue;
			rangeData = textTarget->GetRange();
			int32 start = rangeData.Start(nil);
			int32 end = rangeData.End();
			int32 len = end-start;

			textRef = textTarget->GetTextModel();
			if(textRef == nil)
				return;


			InterfacePtr<ITextModel> textModel(textTarget->QueryTextModel());
			if (!textModel)					{	CAlert::InformationAlert("textModel Failed");					break;	}


			InterfacePtr<IAttributeStrand> ipastrand((IAttributeStrand*)(textModel->QueryStrand(kParaAttrStrandBoss,IID_IATTRIBUTESTRAND)));
			if (!ipastrand)					{	CAlert::InformationAlert("ipastrand Failed");					break;	}	

			InterfacePtr<IAttributeStrand> icastrand((IAttributeStrand*)(textModel->QueryStrand(kCharAttrStrandBoss,IID_IATTRIBUTESTRAND)));
			if (!icastrand)					{	CAlert::InformationAlert("icastrand Failed");					break;	}	

			int32 count,count2; // number of chars from start that have this style
			// let's see what style applies to this bit of text
			UID parastyle = ipastrand->GetStyleUID(start,&count);

			UID carastyle = icastrand->GetStyleUID(start,&count2);

			IActiveContext* activeContext = GetExecutionContextSession()->GetActiveContext();
			if (!activeContext)				{	CAlert::InformationAlert("activeContext Failed");					break;	}	

			IWorkspace * theWS = activeContext->GetContextWorkspace();

			InterfacePtr<IStyleInfo> paraStyleInfo(::GetDataBase(theWS),parastyle,UseDefaultIID());
			if(!paraStyleInfo)		{	CAlert::InformationAlert("paraStyleInfo failed");	break;	}

			InterfacePtr<IStyleInfo> caraStyleInfo(::GetDataBase(theWS),carastyle,UseDefaultIID());
			if(!caraStyleInfo)		{	CAlert::InformationAlert("caraStyleInfo failed");	break;	}

			PMString paraStyleName=paraStyleInfo->GetName();
			PMString caraStyleName=caraStyleInfo->GetName();
			PMString charNumbers,charNumbers2;
			charNumbers.AppendNumber(count);
			charNumbers2.AppendNumber(count2);
			CAlert::InformationAlert("paraStyleName is:"+paraStyleName+"/////"+charNumbers+"***caraStyleName is:"+caraStyleName+"\\\\\\"+charNumbers2);



			/*
			InterfacePtr<ITextModel> textModel(textTarget->QueryTextModel());
			if (!textModel)					{	CAlert::InformationAlert("textModel Failed");					break;	}

			InterfacePtr<IComposeScanner> compScanner(textModel, UseDefaultIID());
			if (!compScanner)				{	CAlert::InformationAlert("compScanner Failed");					break;	}


			IDrawingStyle* drawStyle = compScanner->GetParagraphStyleAt(rangeData.Start(nil), nil);
			if (!drawStyle)				{	CAlert::InformationAlert("drawStyle Failed");					break;	}

			InterfacePtr<ICompositionStyle> compStyle(drawStyle, UseDefaultIID());
			if (!compStyle)				{	CAlert::InformationAlert("compStyle Failed");					break;	}


			int32 dirPara = compStyle->GetParagraphDirection();
			PMString paraDirection;
			paraDirection.AppendNumber(dirPara);
			CAlert::InformationAlert("GetParagraphDirection is:"+paraDirection);
			*/
			/* // default name alert.....error
			InterfacePtr<IStyleGroupManager> paraGroupMgr(document->GetDocWorkSpace(), IID_IPARASTYLEGROUPMANAGER);
			UID styleRootUID = paraGroupMgr->GetRootStyleUID();
			if(styleRootUID==0)				{	CAlert::InformationAlert("styleRootUID Failed :");			break;	}
			else
			{
			//UIDRef styleRef = kInvalidUIDRef;


			//InterfacePtr<IStyleInfo> styleInfo(database,styleRootUID, UseDefaultIID());
			InterfacePtr<IStyleInfo> styleInfo(::GetDataBase(paraGroupMgr),styleRootUID,UseDefaultIID());
			if(!styleInfo)				{	CAlert::InformationAlert("styleInfo Failed ");			break;	}

			PMString paraStyleName=styleInfo->GetName();
			CAlert::InformationAlert("paraStyleName is:"+paraStyleName);

			}
			*/				

		}
	}while(kFalse);
}
void MyPlugin2SelectionObserver::HandleSelectionChanged(const ISelectionMessage* selectionMessage)
{
	// get selection manager for active selection.
	ISelectionManager* iSelectionManager = Utils<ISelectionUtils>()->GetActiveSelection();
	return;
	//get pointer to textSelectionSuite using selection manager OR fCurrentSelection.
	InterfacePtr<ITextSelectionSuite> iTextSelectionSuite(iSelectionManager, UseDefaultIID());
	CAlert::InformationAlert("Selection** changed..");
	if (iTextSelectionSuite) {
		//get pointer to integrator target text using textSelectionSuite.
		//Use to  Return a list of interfaces from the "concrete selection"
		InterfacePtr<const IIntegratorTarget> iIntegratorTarget_text(iTextSelectionSuite, UseDefaultIID());
		if (iIntegratorTarget_text == nil)
			return;
		RangeData rangeData(0, RangeData::kLeanForward);
		UIDRef textRef;
		PMString tagName;
		PMString childCountString = "xml child count-";
		PMString tagUIDString = "UID of TAG -";
		UID tagUID;
		TextIndex startPosXML = 0, endPosXML = 0;
		int startIndexSelection;
		int endIndexSelection;
		// Return a list of interfaces from the "concrete selection"
		//auto_ptr automatically makes clean up of objects.
		std::auto_ptr<IIntegratorTarget::TargetSuiteCollection> selectionSuites_text(iIntegratorTarget_text->GetTarget(ITextTarget::kDefaultIID));
		for (IIntegratorTarget::TargetSuiteCollection::size_type i = 0; i < selectionSuites_text->size(); i++)
		{
			//Get target text.
			ITextTarget* target = (ITextTarget*)selectionSuites_text->at(i).get();
			if (!target)
				continue;
			// extract range from target text.
			rangeData = target->GetRange();
			
			// get start and end index of range selected.
			 startIndexSelection = rangeData.Start(nil);
			 endIndexSelection = rangeData.End();
		

			// get text model for target text.
			InterfacePtr<ITextModel>textModel(target->QueryTextModel());
			
			// get UIDRef of text model.
			textRef	= target->GetTextModel();

			// query xml reference data for text model.
			IXMLReferenceData *xmlReferenceData = Utils<IXMLUtils>()->QueryXMLReferenceData(textRef);
			if (xmlReferenceData)
			{
				// get xml reference from xml reference data.
				XMLReference xmlRef = xmlReferenceData->GetReference();
			
				// obtain xml element from xml reference
				InterfacePtr<IIDXMLElement> xmlElement(xmlRef.Instantiate());
				if (xmlElement != nil) {
					childCountString.AppendNumber(xmlElement->GetChildCount());
					XMLReference childRef = xmlElement->GetNthChild(0);
					InterfacePtr<IIDXMLElement> childXMLElement(childRef.Instantiate());
					if (childXMLElement != nil){
						tagUID = childXMLElement->GetTagUID();
						tagName = childXMLElement->GetTagString();
						Utils<IXMLUtils>()->GetElementMarkerPositions(childXMLElement, &startPosXML, &endPosXML);
					}
		    	}

			}
							
		} // for end
		int length = rangeData.Length();
		if (length >= 1) {
			PMString textFrameContentLength = "selected content length-";
			textFrameContentLength.AppendNumber(length);
			PMString srtPosString = "Start Position XML tag-";
			PMString endPosString = "End postion XML tag-";
			PMString srtPosSelString = "Start Position of Selection-";
			PMString endPosSelString = "End postion Selection-";
			srtPosString.AppendNumber(startPosXML);
			endPosString.AppendNumber(endPosXML);
			srtPosSelString.AppendNumber(startIndexSelection);
			endPosSelString.AppendNumber(endIndexSelection);
			CAlert::InformationAlert(textFrameContentLength);
			CAlert::InformationAlert(childCountString);
			CAlert::InformationAlert(tagName);
			CAlert::InformationAlert(srtPosString);
			CAlert::InformationAlert(endPosString);
			CAlert::InformationAlert(srtPosSelString);
			CAlert::InformationAlert(endPosSelString);

			if (startPosXML <= startIndexSelection && endPosXML >= endIndexSelection) {
				CAlert::InformationAlert("Selection inside tag- "+tagName);
			}
			else
			{
				CAlert::WarningAlert("Selection not inside tag- " + tagName);
			}
		}
	}
	// --------:: Table selection ::---------
	InterfacePtr<ITableSelectionSuite> iTableSelectionSuite(fCurrentSelection, UseDefaultIID());
	if (iTableSelectionSuite == nil)
		return;

	InterfacePtr<const IIntegratorTarget> iIntegratorTarget_table(iTableSelectionSuite, UseDefaultIID());
	if (iIntegratorTarget_table == nil)
		return;

	UIDRef 	tableUIDRef;
	GridArea tableGridArea;
	PMString PMRowCount = "Total no of rows-";
	PMString PMColCount = "Total no of cols-";
	std::auto_ptr<IIntegratorTarget::TargetSuiteCollection> selectionSuites_table(iIntegratorTarget_table->GetTarget(ITableTarget::kDefaultIID));
	for (IIntegratorTarget::TargetSuiteCollection::size_type i = 0; i < selectionSuites_table->size(); i++)
	{
		ITableTarget* target = (ITableTarget*)selectionSuites_table->at(i).get();
		if (!target)
			continue;
		tableUIDRef = target->GetModel();
		if (tableUIDRef != UIDRef(nil, kInvalidUID))
		{
			CAlert::WarningAlert("Table selection occured");
			tableGridArea = target->GetRange();
		}
		InterfacePtr<ITableModel>tableModel(target->QueryModel());
		if (tableModel != nil) {
			RowRange totalRows = tableModel->GetTotalRows();
			ColRange totalCols = tableModel->GetTotalCols();
			int rowCount = totalRows.count;
			int colCount = totalCols.count;
			PMRowCount.AppendNumber(rowCount);
			PMColCount.AppendNumber(colCount);
			CAlert::InformationAlert(PMRowCount);
			CAlert::InformationAlert(PMColCount);

			InterfacePtr<ITableLayout> tableLayout(tableModel, UseDefaultIID());
			if (tableLayout == nil) {
				break;
			}
			CAlert::InformationAlert("table layout present");
			ITableLayout::frame_iterator frameIter = tableLayout->begin_frame_iterator();
			CAlert::InformationAlert("Frame Iterator ppresent");
			
			CAlert::InformationAlert("Frame Iterator present");
			
			InterfacePtr<ITableFrame> tableFrame(frameIter->QueryFrame());
			CAlert::InformationAlert("table frame ppresent");
			if (tableFrame == nil){
				break;
			}
			CAlert::InformationAlert("table frame present");
			UIDRef tableContainerUIDRef = tableFrame->GetFrameRef();
			if (tableContainerUIDRef == nil){
				break;
			}
			CAlert::InformationAlert("table container UIDRef present");
			InterfacePtr<IFrameType> frameType(tableContainerUIDRef, UseDefaultIID());
			//if (frameType == nil) {
				//break;
			//}
			CAlert::InformationAlert("container frame present");
			PMString textFrameType = "Is container , text frame-";   // TYPE OF TEXT FRAME
			
		//	bool isTextFrame = frameType->IsTextFrame();
			CAlert::InformationAlert("Is text frame success");

			if (true) {
				textFrameType.Append("YES");
				CAlert::InformationAlert(textFrameType);
			}
			else {
				textFrameType.Append("NO");
				CAlert::InformationAlert(textFrameType);
			}
		}
	}
	
};
void MyActiveSelectionObserver::textSelection() ////////////////////////Frame and Text Selection......
{
	WideString result,item;
	UIDRef layoutRef;

	do
	{
		InterfacePtr<ITextSelectionSuite> iTextSelectionSuite(fCurrentSelection, UseDefaultIID());
		if (!iTextSelectionSuite)
		{
			break;
		}
		else
		{
			InterfacePtr<const IIntegratorTarget> iIntegratorTarget_text(iTextSelectionSuite, UseDefaultIID());
			if(iIntegratorTarget_text == nil)
				return;

			RangeData rangeData(0,RangeData::kLeanForward);
			UIDRef textRef;

			std::auto_ptr<IIntegratorTarget::TargetSuiteCollection> selectionSuites_text(iIntegratorTarget_text->GetTarget(ITextTarget::kDefaultIID));
			for(IIntegratorTarget::TargetSuiteCollection::size_type i = 0; i < selectionSuites_text->size(); i++)
			{
				ITextTarget* target = (ITextTarget*)selectionSuites_text->at(i).get();
				if(!target)
					continue;
				rangeData = target->GetRange();
				textRef = target->GetTextModel();
				if(textRef == nil)
					return;
				else
				{
					WideString result;
					do
					{
						InterfacePtr<ITextModel> textModel(textRef, UseDefaultIID());
						TextIndex startIndex=rangeData.Start(nil);

						InterfacePtr<IFrameList> frameList(textModel->QueryFrameList());
						int32 frameCount = frameList->GetFrameCount();
						int32 frameIndex = frameList->GetFrameIndexContaining(startIndex);
						PMString IDframe;
						IDframe.AppendNumber(frameIndex);
						CAlert::InformationAlert("frameID: "+IDframe);

						/*           //frame ID...
						for(int32 i=0; i<frameCount;i++)
						{
						UID frameID=frameList->GetNthFrameUID(i);
						PMString IDframe;
						IDframe.AppendNumber(frameID);
						CAlert::InformationAlert("frameID: "+IDframe);
						}
						*/
						/*TextIterator begin(textModel,rangeData.Start(nil));                           // selected text
						TextIterator end(textModel,rangeData.End());                   
						for (TextIterator iter = begin; iter<end; iter++) 
						{
						const UTF32TextChar characterCode = *iter;
						result.Append(characterCode);
						} 

						CAlert::InformationAlert("You Selected : "+result);	*/
					} while(false);	
				} 
			}
		}
	}while (kFalse);
}