mariadb/VC++Files/mysqlmanager/mysqlmanagerview.cpp

850 lines
27 KiB
C++
Raw Normal View History

// MySqlManagerView.cpp : implementation of the CMySqlManagerView class
//
#include "stdafx.h"
#include "MySqlManager.h"
#include "MySqlManagerDoc.h"
#include "MySqlManagerView.h"
#include "mainfrm.h"
#include "ToolSql.h"
#include "RegisterServer.h"
class XStatus
{
public:
XStatus ( LPCSTR fmt, ... )
{
char buf [2048];
va_list args;
va_start(args, fmt);
int ret = vsprintf(buf, fmt, args);
MainFrame->StatusMsg ( "%s", buf );
va_end(args);
}
~XStatus()
{
MainFrame->StatusMsg ( " ");
}
private:
XStatus();
};
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CMySqlManagerView, CTreeView)
BEGIN_MESSAGE_MAP(CMySqlManagerView, CTreeView)
//{{AFX_MSG_MAP(CMySqlManagerView)
ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
ON_COMMAND(IDM_SQL_TOOL_QUERY, OnSqlToolQuery)
ON_COMMAND(IDM_REFRESH, OnRefresh)
ON_COMMAND(IDM_TOOLS_SERVER_PROPERTIES,OnServerProperties)
ON_COMMAND(IDM_TOOLS_REGISTER_SERVER, OnRegisterServer)
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
CMySqlManagerView::CMySqlManagerView()
: m_pTree(0)
, m_pImages(0)
, m_pbmBmp(0)
, m_pTool(0)
{
}
/////////////////////////////////////////////////////////////////////////////
CMySqlManagerView::~CMySqlManagerView()
{
if ( m_pbmBmp ) delete m_pbmBmp;
if ( m_pImages ) delete m_pImages;
if ( m_pTool )
{
m_pTool->DestroyWindow();
delete m_pTool;
}
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMySqlManagerView::PreCreateWindow(CREATESTRUCT& cs)
{
return CTreeView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnDraw(CDC* pDC)
{
CMySqlManagerDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMySqlManagerView::OnPreparePrinting(CPrintInfo* pInfo)
{
return DoPreparePrinting(pInfo);
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
}
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
void CMySqlManagerView::AssertValid() const
{
CTreeView::AssertValid();
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
/////////////////////////////////////////////////////////////////////////////
CMySqlManagerDoc* CMySqlManagerView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMySqlManagerDoc)));
return (CMySqlManagerDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
m_pTree = & GetTreeCtrl();
m_pImages = new CImageList;
m_pImages->Create( 16, 16, FALSE, 0, 10 );
m_pbmBmp = new CBitmap;
m_pbmBmp->LoadBitmap( IDB_BITMAP1 );
m_pImages->Add( m_pbmBmp, (COLORREF)0 );
m_pTree->SetImageList( m_pImages, TVSIL_NORMAL );
HTREEITEM h = AddResource ( TVI_ROOT, new CResourceServer ( "MySQL", "localhost", "root", "" ) );
// AddResource ( h, new CResourceProcesslist () );
h = AddResource ( TVI_ROOT, new CResourceServer ( "Test", "localhost", "test", "" ) );
// AddResource ( h, new CResourceProcesslist () );
m_pTree->ModifyStyle(0, TVS_HASLINES|TVS_HASBUTTONS);
}
/////////////////////////////////////////////////////////////////////////////
HTREEITEM CMySqlManagerView::AddResource ( HTREEITEM hParent, CResource* pRes, HTREEITEM hLastItem )
{
TV_INSERTSTRUCT ItemStruct;
memset( &ItemStruct, 0, sizeof(ItemStruct) );
ItemStruct.hParent = hParent;
ItemStruct.hInsertAfter = hLastItem;
ItemStruct.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE;
ItemStruct.item.hItem = 0;
ItemStruct.item.state = 0;
ItemStruct.item.stateMask = 0;
ItemStruct.item.pszText = (LPSTR) pRes->GetDisplayName();
ItemStruct.item.cchTextMax = (int) strlen( ItemStruct.item.pszText );
ItemStruct.item.iImage = 2;
ItemStruct.item.iSelectedImage = 3;
ItemStruct.item.cChildren = 0;
ItemStruct.item.lParam = (long) pRes;
hLastItem = m_pTree->InsertItem( &ItemStruct );
return hLastItem;
}
//int InsertNetResources( LPNETRESOURCE lpNetResource, CTreeCtrl *pTreeCtrl, HTREEITEM hParent, int *pnCount )
//{
//
// DWORD Erc;
// NETRESOURCE *pNetRes;
// HANDLE hEnum;
//
// if( !pTreeCtrl ) return -1;
// if( pnCount ) *pnCount = 0;
// Erc = WNetOpenEnum(
// RESOURCE_GLOBALNET,//DWORD dwScope, // scope of enumeration
// RESOURCETYPE_ANY,//DWORD dwType, // resource types to list
// 0,//DWORD dwUsage, // resource usage to list
// lpNetResource,//LPNETRESOURCE lpNetResource, // pointer to resource structure
// &hEnum//LPHANDLE lphEnum // pointer to enumeration handle buffer
// );
// if( Erc )
// {
// ShowError( Erc );
// return Erc;
// }
//
//
// DWORD dwBufferSize = 1024;
// pNetRes = (NETRESOURCE *)malloc( dwBufferSize );
//
// while( TRUE )
// {
// DWORD dwCount = 0xFFFFFFFF;
// Erc = WNetEnumResource(
// hEnum,//HANDLE hEnum, // handle to enumeration
// &dwCount,//LPDWORD lpcCount, // pointer to entries to list
// pNetRes,//LPVOID lpBuffer, // pointer to buffer for results
// &dwBufferSize//LPDWORD lpBufferSize // pointer to buffer size variable
// );
// if( Erc == ERROR_NO_MORE_ITEMS ) return 0;
// if( Erc )
// {
// free( pNetRes );
// pNetRes = (NETRESOURCE *)malloc( dwBufferSize );
// Erc = WNetEnumResource(
// hEnum,//HANDLE hEnum, // handle to enumeration
// &dwCount,//LPDWORD lpcCount, // pointer to entries to list
// pNetRes,//LPVOID lpBuffer, // pointer to buffer for results
// &dwBufferSize//LPDWORD lpBufferSize // pointer to buffer size variable
// );
// }
// if( Erc ){ ShowError( Erc ); return Erc; }
//
// TV_INSERTSTRUCT ItemStruct;
// HTREEITEM hLastItem = TVI_FIRST;
// DWORD i;
//
// if( pnCount ) *pnCount += dwCount;
// for( i=0; i<dwCount; i++ )
// {
// memset( &ItemStruct, 0, sizeof(ItemStruct) );
// ItemStruct.hParent = hParent;
// ItemStruct.hInsertAfter = hLastItem;
// ItemStruct.item.mask = TVIF_TEXT | TVIF_PARAM | TVIF_SELECTEDIMAGE | TVIF_IMAGE;
// ItemStruct.item.hItem = 0;
// ItemStruct.item.state = 0;
// ItemStruct.item.stateMask = 0;
// ItemStruct.item.pszText = pNetRes[i].lpRemoteName;
// ItemStruct.item.cchTextMax = strlen( ItemStruct.item.pszText );
// ItemStruct.item.iImage = 2;
// ItemStruct.item.iSelectedImage = 3;
// ItemStruct.item.cChildren = 0;
// ItemStruct.item.lParam = (long) (new CNetResource( &pNetRes[i] ));
//
// hLastItem = pTreeCtrl->InsertItem( &ItemStruct );
// }
// }//end while()
//
// WNetCloseEnum( hEnum );
// free( pNetRes );
// return Erc;
//}
/////////////////////////////////////////////////////////////////////////////
static void print_top(MYSQL_RES *result)
{
uint length;
MYSQL_FIELD *field;
mysql_field_seek(result,0);
while ((field = mysql_fetch_field(result)))
{
if ((length= (uint) strlen(field->name)) > field->max_length)
field->max_length=length;
else
length=field->max_length;
}
}
/////////////////////////////////////////////////////////////////////////////
static void print_header(MYSQL_RES *result,CStringArray& rg)
{
MYSQL_FIELD *field;
print_top(result);
mysql_field_seek(result,0);
while ((field = mysql_fetch_field(result)))
{
// printf(" %-*s|",field->max_length+1,field->name);
rg.Add(field->name);
}
print_top(result);
}
/////////////////////////////////////////////////////////////////////////////
static void print_row(MYSQL_RES *result,MYSQL_ROW row,CStringArray& rg)
{
uint i,length;
MYSQL_FIELD *field;
mysql_field_seek(result,0);
for (i=0 ; i < mysql_num_fields(result); i++)
{
field = mysql_fetch_field(result);
length=field->max_length;
rg.Add(row[i] ? (char*) row[i] : "");
// printf(" %-*s|",length+1,row[i] ? (char*) row[i] : "");
}
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::ProcessResultSet ( HTREEITEM hItem, LPVOID r, CResource* pResource )
{
MYSQL_RES* result = (MYSQL_RES *) r;
MYSQL_ROW row;
switch (pResource->GetType())
{
case CResource::eProcesslist:
{
CResourceProcesslist* p = (CResourceProcesslist*) pResource;
CResourceProcesslistItem* pi = new CResourceProcesslistItem ();
CString strText;
print_header(result,p->m_rgFields);
for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
{
strText += p->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
AddResource ( hItem, pi );
for (int index=0;(row=mysql_fetch_row(result));index++)
{
pi = new CResourceProcesslistItem ();
print_row(result,row,pi->m_rgFields);
strText.Empty();
for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
{
strText += pi->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
AddResource ( hItem, pi );
}
print_top(result);
break;
}
case CResource::eServer:
{
CResourceServer* p = (CResourceServer*) pResource;
CResourceDatabase* pi = new CResourceDatabase ();
CString strText;
/* print_header(result,p->m_rgFields); */
for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
{
strText += p->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
/* AddResource ( hItem, pi ); */
for (int index=0;(row=mysql_fetch_row(result));index++)
{
pi = new CResourceDatabase ();
print_row(result,row,pi->m_rgFields);
strText.Empty();
for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
{
strText += pi->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
AddResource ( hItem, pi );
}
print_top(result);
break;
}
case CResource::eDatabase:
{
CResourceDatabase* p = (CResourceDatabase*) pResource;
CResourceTable* pi = new CResourceTable ();
CString strText;
/* print_header(result,p->m_rgFields); */
for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
{
strText += p->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
/* AddResource ( hItem, pi ); */
for (int index=0;(row=mysql_fetch_row(result));index++)
{
pi = new CResourceTable ();
print_row(result,row,pi->m_rgFields);
strText.Empty();
for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
{
strText += pi->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
AddResource ( hItem, pi );
}
print_top(result);
break;
}
case CResource::eTable:
{
CResourceTable* p = (CResourceTable*) pResource;
CResourceField* pi = new CResourceField ();
CString strText;
/* print_header(result,p->m_rgFields); */
for (int i = 0; i<p->m_rgFields.GetSize(); i++ )
{
strText += p->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
/* AddResource ( hItem, pi ); */
for (int index=0;(row=mysql_fetch_row(result));index++)
{
pi = new CResourceField ();
print_row(result,row,pi->m_rgFields);
strText.Empty();
for (int i = 0; i<pi->m_rgFields.GetSize(); i++ )
{
strText += pi->m_rgFields[i];
strText += " ";
}
pi->m_strName = strText;
AddResource ( hItem, pi );
}
print_top(result);
break;
}
}
}
/////////////////////////////////////////////////////////////////////////////
CResource* CMySqlManagerView::GetSelectedResource(HTREEITEM* phItemRet)
{
CResource* pResource = NULL;
HTREEITEM hItem = m_pTree->GetSelectedItem();
if ( hItem )
{
TV_ITEM item;
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( item.lParam )
{
pResource = (CResource*) item.lParam;
}
}
if (phItemRet)
{
*phItemRet = hItem;
}
return pResource;
}
/////////////////////////////////////////////////////////////////////////////
CResourceServer* CMySqlManagerView::GetServerResource(HTREEITEM hItem)
{
TV_ITEM item;
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( !item.lParam ) return NULL;
CResource* pResource = (CResource*) item.lParam;
switch (pResource->GetType())
{
case CResource::eServer:
{
return (CResourceServer*) pResource;
}
case CResource::eDatabase:
{
HTREEITEM hParent = m_pTree->GetParentItem(hItem);
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hParent;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( !item.lParam ) return NULL;
return (CResourceServer*) item.lParam;
}
case CResource::eTable:
{
HTREEITEM hParent = m_pTree->GetParentItem(m_pTree->GetParentItem(hItem));
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hParent;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( !item.lParam ) return NULL;
return (CResourceServer*) item.lParam;
}
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult)
{
HTREEITEM hItem;
hItem = m_pTree->GetSelectedItem();
*pResult = 0;
if ( !hItem ) return;
TV_ITEM item;
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( ! item.lParam ) return;
if ( item.cChildren ) return; //if has got children expand only
CWaitCursor x;
CResource* pResource = (CResource*) item.lParam;
MYSQL mysql;
MYSQL_RES *result;
switch (pResource->GetType())
{
case CResource::eProcesslist:
{
XStatus x ( "Connecting to server %s on host %s..."
, (LPCTSTR) pResource->GetDisplayName()
, (LPCTSTR) pResource->GetHostName()
);
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
{
PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
return;
}
if (!(result=mysql_list_processes(&mysql)))
{
return;
}
ProcessResultSet ( hItem, result, pResource );
mysql_free_result(result);
mysql_close(&mysql);
break;
}
case CResource::eServer:
{
MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
, (LPCTSTR) pResource->GetDisplayName()
, (LPCTSTR) pResource->GetHostName()
);
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
{
PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
, (LPCTSTR) pResource->GetDisplayName()
, mysql_error(&mysql)
);
return;
}
if (!(result=mysql_list_dbs(&mysql,0)))
{
}
ProcessResultSet ( hItem, result, pResource );
mysql_free_result(result);
mysql_close(&mysql);
MainFrame->StatusMsg ( " " );
break;
}
case CResource::eDatabase:
{
CResourceServer* pServer = GetServerResource(hItem);
if (!pServer) return;
MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
, (LPCTSTR) pServer->GetDisplayName()
, (LPCTSTR) pServer->GetHostName()
);
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,pServer->GetHostName(), pServer->GetUserName(),pServer->GetPassword(),0,pServer->GetPortNumber(), NullS,0))
{
PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
, (LPCTSTR) pServer->GetDisplayName()
, mysql_error(&mysql)
);
return;
}
CResourceDatabase* pRes = (CResourceDatabase*) pResource;
CString strDB = pResource->GetDisplayName();
strDB.TrimRight();
if (mysql_select_db(&mysql,strDB))
{
MainFrame->StatusMsg ( "Error: Selecting database %s... (%s)"
, (LPCTSTR) strDB
, mysql_error(&mysql)
);
return;
}
if (!(result=mysql_list_tables(&mysql,0)))
{
}
ProcessResultSet ( hItem, result, pRes );
mysql_free_result(result);
mysql_close(&mysql);
MainFrame->StatusMsg ( " " );
break;
}
case CResource::eTable:
{
CResourceServer* pServer = GetServerResource(hItem);
if (!pServer) return;
MainFrame->StatusMsg ( "Connecting to server %s on host %s..."
, (LPCTSTR) pServer->GetDisplayName()
, (LPCTSTR) pServer->GetHostName()
);
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,pServer->GetHostName(), pServer->GetUserName(),pServer->GetPassword(),0,pServer->GetPortNumber(), NullS,0))
{
PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
MainFrame->StatusMsg ( "Error: Connecting to server %s... (%s)"
, (LPCTSTR) pServer->GetDisplayName()
, mysql_error(&mysql)
);
return;
}
HTREEITEM hParent = m_pTree->GetParentItem(hItem);
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hParent;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( item.lParam )
{
CResourceDatabase* pResDatabase = (CResourceDatabase*) item.lParam;
CResourceTable* pRes = (CResourceTable*) pResource;
CString strDB = pResDatabase->GetDisplayName();
CString strTable = pResource->GetDisplayName();
strDB.TrimRight();
strTable.TrimRight();
if (mysql_select_db(&mysql,strDB))
{
return;
}
CString str; str.Format("show fields from %s",(LPCTSTR)strTable);
if ( mysql_query(&mysql,str)==0 )
{
MYSQL_RES *result;
if ((result=mysql_store_result(&mysql)))
{
ProcessResultSet ( hItem, result, pRes );
mysql_free_result(result);
}
}
}
mysql_close(&mysql);
break;
}
}
// InsertNetResources( (LPNETRESOURCE)pTvItem->lParam,
// &m_TreeCtrl,
// hItem,
// &pTvItem->cChildren );
// pTvItem->mask = TVIF_CHILDREN;
// m_TreeCtrl.SetItem( pTvItem );
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnRefresh()
{
HTREEITEM hItem = NULL;
CResource* pResource = GetSelectedResource(&hItem);
if (pResource&&hItem)
{
switch (pResource->GetType())
{
case CResource::eTable:
{
TV_ITEM item;
MYSQL mysql;
// MYSQL_RES *result;
HTREEITEM hParent = m_pTree->GetParentItem(hItem);
HTREEITEM hChild = m_pTree->GetChildItem(hItem);
while (hChild)
{
HTREEITEM h = m_pTree->GetNextSiblingItem(hChild);
BOOL b = m_pTree->DeleteItem(hChild);
hChild = h;
}
mysql_init(&mysql);
if (!mysql_real_connect(&mysql,pResource->GetHostName(), pResource->GetUserName(),pResource->GetPassword(),0,pResource->GetPortNumber(), NullS,0))
{
return;
}
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hParent;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
if ( item.lParam )
{
CResourceDatabase* pResDatabase = (CResourceDatabase*) item.lParam;
CResourceTable* pRes = (CResourceTable*) pResource;
CString strDB = pResDatabase->GetDisplayName();
CString strTable = pResource->GetDisplayName();
strDB.TrimRight();
strTable.TrimRight();
if (mysql_select_db(&mysql,strDB))
{
return;
}
CString str; str.Format("show fields from %s",(LPCTSTR)strTable);
if ( mysql_query(&mysql,str)==0 )
{
MYSQL_RES *result;
if ((result=mysql_store_result(&mysql)))
{
ProcessResultSet ( hItem, result, pRes );
mysql_free_result(result);
}
}
}
mysql_close(&mysql);
break;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnRegisterServer()
{
CRegisterServer dlg;
if (dlg.DoModal()!=IDOK) return;
AddResource (
TVI_ROOT,
new CResourceServer ( dlg.m_strServer, dlg.m_strHost, dlg.m_strUser, dlg.m_strPassword, dlg.m_strPort )
);
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnServerProperties()
{
HTREEITEM hItem;
CResource* pRes = GetSelectedResource(&hItem);
if (!pRes) return;
if (pRes->GetType()!=CResource::eServer) return;
CResourceServer* pResource = (CResourceServer*)pRes;
CRegisterServer dlg;
dlg.m_strHost = pResource->GetHostName();
dlg.m_strUser = pResource->GetUserName();
dlg.m_strPassword = pResource->GetPassword();
dlg.m_strPort = pResource->GetPortName();
if (dlg.DoModal()!=IDOK) return;
pResource->m_strHost = dlg.m_strHost ;
pResource->m_strUser = dlg.m_strUser ;
pResource->m_strPassword = dlg.m_strPassword;
pResource->m_strPort = dlg.m_strPort ;
TV_ITEM item;
memset( &item, 0, sizeof(TV_ITEM) );
item.hItem = hItem;
item.mask = TVIF_TEXT | TVIF_HANDLE | TVIF_CHILDREN | TVIF_PARAM ;
m_pTree->GetItem( &item );
}
/////////////////////////////////////////////////////////////////////////////
void CMySqlManagerView::OnSqlToolQuery()
{
HTREEITEM hItem;
CResource* pResource = GetSelectedResource(&hItem);
if (!pResource) return;
CResourceServer* pServer = GetServerResource(hItem);
if (!pServer) return; /* Avoid bug when selecting field */
m_pTool = new CToolSql ( AfxGetMainWnd(), pServer, pResource );
if ( ! m_pTool->Create(IDD_TOOL_SQL,this) )
{
delete m_pTool;
m_pTool = 0;
PostMessage(WM_COMMAND,IDM_TOOLS_SERVER_PROPERTIES);
}
else
{
m_pTool->ShowWindow(SW_SHOW);
}
}
/////////////////////////////////////////////////////////////////////////////
BOOL CMySqlManagerView::PreTranslateMessage(MSG* pMsg)
{
if (m_pTool && m_pTool->PreTranslateMessage(pMsg))
return TRUE;
return CTreeView::PreTranslateMessage(pMsg);
}
void CMySqlManagerView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
POINT pt;
GetCursorPos ( & pt );
CMenu menu;
menu.CreatePopupMenu ();
menu.AppendMenu ( MF_ENABLED , IDM_SQL_TOOL_QUERY, "SQL Query" );
menu.AppendMenu ( MF_ENABLED , IDM_REFRESH, "Refresh active item(s)" );
menu.AppendMenu ( MF_ENABLED , IDM_TOOLS_REGISTER_SERVER, "Register server" );
menu.AppendMenu ( MF_ENABLED , IDM_TOOLS_SERVER_PROPERTIES, "Properties" );
menu.TrackPopupMenu ( TPM_LEFTALIGN | TPM_RIGHTBUTTON , pt.x, pt.y, CWnd::GetParent(), NULL );
*pResult = 0;
}