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::tableSelection()
{
	int row=2;
	int col=2;
	do
	{
		InterfacePtr<ITableSelectionSuite> iTableSelectionSuite(fCurrentSelection, UseDefaultIID());
		if (!iTableSelectionSuite)
		{
			break;
		}
		else
		{
			InterfacePtr<const IIntegratorTarget> iIntegratorTarget_table(iTableSelectionSuite, UseDefaultIID());
			if(iIntegratorTarget_table == nil)
				return;

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

			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* tableTarget = (ITableTarget*)selectionSuites_table->at(i).get();
				if(!tableTarget)
					continue;

				InterfacePtr<ITableModel> tableModel(tableTarget->QueryModel());
				if(!tableModel)
				{
					CAlert::InformationAlert("tableModel failed");
					break;
				}

				//tableRef = tableTarget->GetModel();
				bool16 hasContent=tableTarget->HasContent();
				//CAlert::InformationAlert("Table is selected.");



				if(hasContent==kTrue)
				{
					//CAlert::InformationAlert("Has Content.");
					//GridArea selectedText=iTableSelectionSuite->GetSelection();

					//InterfacePtr<ITableSuite> tableSuite(fCurrentSelection, UseDefaultIID());
					/*    Number of columns visible to user.
					int32 userNumCols=tableSuite->GetUserNumColsInTable();
					PMString UNC("No.of cols :");
					UNC.AppendNumber(userNumCols);
					CAlert::InformationAlert(UNC);
					*/
					/*        //text cell selection  (click+ esc)
					bool16 textCellSelected=tableSuite->IsAnyTextCellSelected();
					if(textCellSelected==kTrue)
					{
					CAlert::InformationAlert("Text Cell is selected.");
					}
					*/


					//this->cellTextSelection(iTableSelectionSuite);

					//GridAddress gridAdd= iTableSelectionSuite->GetAnchor();
					GridAddress gridAdd(row, col);

					GridID targetCellGridID = tableModel->GetGridID(gridAdd);
					if(!targetCellGridID)
					{
						CAlert::InformationAlert("targetCellGridID failed");
						break;
					}

					InterfacePtr<ITextStoryThreadDict> textStoryThreadDict(tableModel, UseDefaultIID());
					if (textStoryThreadDict == nil) 
					{
						CAlert::InformationAlert("textStoryThreadDict failed");
						break;
					}

					InterfacePtr<ITextStoryThread> textStoryThread(textStoryThreadDict->QueryThread(targetCellGridID));
					if (textStoryThread == nil)
					{
						CAlert::InformationAlert("textStoryThread failed");
						break;
					}

					this->getText(textStoryThread);
				}

				/*Remove this if needed*/			//this->InspectTableObject(pageItemRef);
				//	CAlert::InformationAlert("Frame is selected:");
				//}	
				/*
				/////////////////**************************************
				SDKLayoutHelper layoutHelper;
				InterfacePtr<ITextModel> textModel(layoutHelper.GetTextModelRef(graphicFrameData), UseDefaultIID());
				if (!textModel) 
				{
				break;
				}

				// Ask which TextIndex	 should be selected.
				Utils<ISnipRunParameterUtils> parameterUtils;
				int32 totalLength = textModel->TotalLength();
				TextIndex at = 0;
				if (totalLength > 1) 
				{
				at = parameterUtils->GetInt32("TextIndex", 0, 0, totalLength-1);
				if (parameterUtils->WasDialogCancelled()) 
				{
				break;
				}	
				}

				InterfacePtr<ITextFrameColumn> textFrameColumn(this->QueryTextFrameContaining(textModel, at));
				if (!textFrameColumn) 
				{
				break;
				}
				UIDRef graphicFrameRef = this->GetGraphicFrameRef(textFrameColumn, kFalse);*/
				/*if (graphicFrameRef == UIDRef::gNull) 
				{
				break;
				}
				*/
				/*		// Select that frame.
				//if (selectionManager->SelectionExists (kInvalidClass, ISelectionManager::kAnySelection)) 
				//{
				// Clear the selection
				//	selectionManager->DeselectAll(nil);
				//}
				//layoutSelectionSuite->SelectPageItems(UIDList(graphicFrameRef), Selection::kReplace, Selection::kAlwaysCenterInView);
				//				}				
				//}
				//}
				//}*/
				/*
				InterfacePtr<ITextSelectionSuite> iTextSelectionSuite(fCurrentSelection, UseDefaultIID());
				if (iTextSelectionSuite == nil) 
				{
				CAlert::InformationAlert("iTextSelectionSuite Failed");
				}
				else
				{
				InterfacePtr<const IIntegratorTarget> iIntegratorTarget_text(iTextSelectionSuite, UseDefaultIID());
				if(iIntegratorTarget_text == nil)
				break;

				InterfacePtr<const IIntegratorTarget> iIntegratorTarget_text(iTextSelectionSuite, UseDefaultIID());
				if(iIntegratorTarget_text == nil)
				break;

				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)
				break;

				InterfacePtr<ITextModel> textModel(textRef,UseDefaultIID());

				TextIterator begin(textModel,rangeData.Start(nil));
				TextIterator end(textModel,rangeData.End());


				for (TextIterator iter = begin; iter != end; iter++) 
				{
				const UTF32TextChar characterCode = *iter;
				result.Append(characterCode);
				}

				CAlert::InformationAlert("Selected text is:"+result);
				}*/
			}
		}
	}while (kFalse);
}