anthonyd%netscape.com 873dac92c4 *** NOT PART OF THE BUILD PROCESS
bug # 163739 - XPI Packager
adding the xpi packager to the mozilla tree.  this is a windows only app used to build the xpi packager
for building self installing xpi files.


git-svn-id: svn://10.0.0.236/trunk@134725 18797224-902f-48f8-a5cc-f745e15eee43
2002-12-03 21:52:45 +00:00

811 lines
25 KiB
C++

// XPIPackagerDlg.cpp : implementation file
//
#include "stdafx.h"
#include "XPIPackager.h"
#include "XPIPackagerDlg.h"
#include "FileChooserDlg.h"
#include "MIMETypeChooseDlg.h"
#include "ZipArchive.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define COMPANY_DEFAULT_VALUE "My Plugin Company"
#define PLUGIN_DESC_DEFAULT_VALUE "My Exemplary Plugin Mine All Mine"
#define DOMAIN_DEFAULT_VALUE "www.MyPluginCompany.com"
#define ZIP_COMMAND "Y:\\workspace\\XPIinstaller\\Debug\\zip.exe -q "
#define QUOTE "\""
#define SPACE " "
#define INSTALL_JS_FILE "install.js"
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CXPIPackagerDlg dialog
CXPIPackagerDlg::CXPIPackagerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CXPIPackagerDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CXPIPackagerDlg)
m_Domain_Name_Value = _T("");
m_PLID_Value = _T("");
m_Plugin_Version_Value = _T("");
m_Product_Name_Value = _T("");
m_Archive_Name_Value = _T("");
m_Component_Size_Value = 0;
m_Company_Name_Value = _T("");
m_Plugin_Size_Value = 0;
m_Plugin_Description_Value = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CXPIPackagerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CXPIPackagerDlg)
DDX_Control(pDX, IDC_MIME_LIST, m_MIME_List_Control);
DDX_Control(pDX, IDC_COMPONENT_LIST, m_Component_List_Control);
DDX_Control(pDX, IDC_PLUGIN_LIST, m_Plugin_List_Control);
DDX_Text(pDX, IDC_DOMAIN_NAME, m_Domain_Name_Value);
DDX_Text(pDX, IDC_PLID, m_PLID_Value);
DDX_Text(pDX, IDC_PLUGIN_VERSION, m_Plugin_Version_Value);
DDX_Text(pDX, IDC_PRODUCT_NAME, m_Product_Name_Value);
DDX_Text(pDX, IDC_ARCHIVE_NAME, m_Archive_Name_Value);
DDX_Text(pDX, IDC_COMPONENT_SIZE, m_Component_Size_Value);
DDX_Text(pDX, IDC_COMPANY_NAME, m_Company_Name_Value);
DDX_Text(pDX, IDC_PLUGIN_SIZE, m_Plugin_Size_Value);
DDX_Text(pDX, IDC_PLUGIN_DESCRIPTION, m_Plugin_Description_Value);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CXPIPackagerDlg, CDialog)
//{{AFX_MSG_MAP(CXPIPackagerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, OnCreate)
ON_BN_CLICKED(IDC_AUTO_PLID, OnAutoPLID)
ON_BN_CLICKED(IDC_BIG_HELP, OnBigHelp)
ON_BN_CLICKED(IDC_PLID_HELP, OnPLIDHelp)
ON_BN_CLICKED(IDC_COMPONENT_BROWSE, OnComponentBrowse)
ON_BN_CLICKED(IDC_COMPONENT_REMOVE, OnComponentRemove)
ON_BN_CLICKED(IDC_PLUGIN_BROWSE, OnPluginBrowse)
ON_BN_CLICKED(IDC_PLUGIN_REMOVE, OnPluginRemove)
ON_BN_CLICKED(IDC_MIMETYPE_ADD, OnMIMETypeAdd)
ON_BN_CLICKED(IDC_MIMETYPE_REMOVE, OnMIMETypeRemove)
ON_NOTIFY(NM_DBLCLK, IDC_PLUGIN_LIST, OnDblclkPluginList)
ON_NOTIFY(NM_DBLCLK, IDC_COMPONENT_LIST, OnDblclkComponentList)
ON_NOTIFY(NM_DBLCLK, IDC_MIME_LIST, OnDblclkMimeList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CXPIPackagerDlg message handlers
BOOL CXPIPackagerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
// Initialize the CListControl Columns
m_Plugin_List_Control.InsertColumn( 0, "Plugin File", LVCFMT_LEFT, 200, -1 );
m_Plugin_List_Control.InsertColumn( 1, "PLID", LVCFMT_LEFT, 125, -1 );
m_Component_List_Control.InsertColumn( 0, "Component File", LVCFMT_LEFT, 200, -1 );
m_Component_List_Control.InsertColumn( 1, "PLID", LVCFMT_LEFT, 125, -1 );
m_MIME_List_Control.InsertColumn( 0, "Mime Type", LVCFMT_LEFT, 150, -1 );
m_MIME_List_Control.InsertColumn( 1, "Suffix", LVCFMT_LEFT, 100, -1 );
m_MIME_List_Control.InsertColumn( 2, "Suffix Description", LVCFMT_LEFT, 150, -1 );
m_MIME_List_Control.InsertColumn( 3, "Plugin File", LVCFMT_LEFT, 250, -1 );
// fill with starter information
m_Company_Name_Value = COMPANY_DEFAULT_VALUE;
m_Plugin_Description_Value = PLUGIN_DESC_DEFAULT_VALUE;
m_Domain_Name_Value = DOMAIN_DEFAULT_VALUE;
UpdateData(false);
return TRUE; // return TRUE unless you set the focus to a control
}
void CXPIPackagerDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CXPIPackagerDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CXPIPackagerDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CXPIPackagerDlg::OnCreate()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(!m_Archive_Name_Value.GetLength())
{
MessageBox("Need a valid name for the final XPI Installer file.", "Invalid File", MB_OK + MB_ICONEXCLAMATION);
return;
}
if(!m_PluginFileList.GetSize())
{
MessageBox("You must have at least one PLUGIN file in a XPI Archive.", "Plugin File Missing", MB_OK + MB_ICONEXCLAMATION);
return;
}
CString tempFileName = m_PluginFileList.ElementAt(0);
CString tempArchiveName = m_Archive_Name_Value.Left(tempFileName.ReverseFind('.') + 1);
CString temp = tempFileName.Left(tempFileName.ReverseFind('\\') + 1);
temp += m_Archive_Name_Value;
m_Archive_Name_Value = temp;
//create new archive *.xpi
CZipArchive archive;
archive.Open(m_Archive_Name_Value, CZipArchive::create);
//add plugin dlls
int FileCount = m_PluginFileList.GetSize();
for(int i = 0; i < FileCount; i++)
{
tempFileName = m_PluginFileList.GetAt(i);
archive.AddNewFile(tempFileName, -1, false);
}
//add components
FileCount = m_ComponentFileList.GetSize();
if( FileCount != 0 )
{
for( i = 0; i < FileCount; i++)
{
tempFileName = m_ComponentFileList.GetAt(i);
archive.AddNewFile(tempFileName, -1, false);
}
}
//add install .js
HRSRC info = ::FindResource(NULL,MAKEINTRESOURCE(IDR_HEADER), "JSCRIPT");
HGLOBAL resource = ::LoadResource(NULL, info);
DWORD fileSize = SizeofResource(NULL, info);
BYTE *mempointer = (BYTE *) GlobalLock(resource);
CString header;
memcpy(header.GetBuffer(fileSize), mempointer, fileSize);
header.ReleaseBuffer();
int foo = header.GetLength();
info = ::FindResource(NULL,MAKEINTRESOURCE(IDR_BODY), "JSCRIPT");
resource = ::LoadResource(NULL, info);
fileSize = SizeofResource(NULL, info);
mempointer = (BYTE *) GlobalLock(resource);
CString body;
memcpy(body.GetBuffer(fileSize), mempointer, fileSize);
body.ReleaseBuffer();
int foo2 = body.GetLength();
CString finalFile;
GetGuts(header, body, finalFile);
if (finalFile.GetLength())
{
CZipFileHeader header;
header.m_uMethod = Z_DEFLATED;
header.SetFileName("install.js");
header.SetComment("install.js: install script");
archive.OpenNewFile(header, Z_DEFAULT_COMPRESSION, m_Archive_Name_Value);
archive.WriteNewFile(finalFile.GetBuffer(0), finalFile.GetLength());
archive.CloseNewFile();
}
//close archive
archive.Close();
GlobalUnlock(resource);
CString tMessage = "The following XPI Archive:\n\n";
tMessage += m_Archive_Name_Value;
tMessage += "\n\nwas created successfully!";
MessageBox(tMessage, "XPI Archive Created!", MB_OK + MB_ICONEXCLAMATION);
return;
}
/* --- FILLER.JS ---
var PLUGIN_FILE = [%s];
var PLUGIN_FILE_PLID = [%s];
var COMPONENT_FILE = [%s];
var COMPONENT_FILE_PLID = [%s];
// (DLL files)
var PLUGIN_SIZE = %d;
// (XPI files)
var COMPONENT_SIZE = %d;
var SOFTWARE_NAME = "%s";
var PLID = "%s";
var VERSION = "%s";
var MIMETYPE = [%s];
var SUFFIX = [%s];
var SUFFIX_DESCRIPTION = [%s];
var COMPANY_NAME = "%s";
var PLUGIN_DESCRIPTION = "%s";
*/
#define BUFFER_SIZE 5000
void
CXPIPackagerDlg::GetGuts(const CString &header, const CString &body, CString &result)
{
CString filler;
HRSRC info = ::FindResource(NULL,MAKEINTRESOURCE(IDR_FILLER), "JSCRIPT");
HGLOBAL resource = ::LoadResource(NULL, info);
DWORD fileSize = SizeofResource(NULL, info);
BYTE *mempointer = (BYTE *) GlobalLock(resource);
memcpy(filler.GetBuffer(fileSize), mempointer, fileSize);
filler.ReleaseBuffer();
CFile t_File;
CString t_FileName;
CString t_FullFileName;
// build the plugin parameter
CString t_PluginParameter;
CString t_PluginPLIDParameter;
int FileCount = m_PluginFileList.GetSize();
for(int i = 0; i < FileCount; i++)
{
t_FullFileName = m_PluginFileList.GetAt(i);
if(t_File.Open(t_FullFileName, CFile::modeRead))
{
t_FileName = t_File.GetFileName();
}
t_File.Close();
t_PluginParameter += "\"" + t_FileName + "\"";
t_PluginPLIDParameter += "\"" + m_PluginPLIDList.ElementAt(i) + "\"";
if(i != (FileCount - 1))
{
t_PluginParameter += ", ";
t_PluginPLIDParameter += ", ";
}
}
// build the component parameter
CString t_ComponentParameter;
CString t_ComponentPLIDParameter;
FileCount = m_ComponentFileList.GetSize();
for( i = 0; i < FileCount; i++)
{
t_FullFileName = m_ComponentFileList.GetAt(i);
if(t_File.Open(t_FullFileName, CFile::modeRead))
{
t_FileName = t_File.GetFileName();
}
t_File.Close();
t_ComponentParameter += "\"" + t_FileName + "\"";
t_ComponentPLIDParameter += "\"" + m_ComponentPLIDList.ElementAt(i) + "\"";
if(i != (FileCount - 1))
{
t_ComponentParameter += ", ";
t_ComponentPLIDParameter += ", ";
}
}
if(!t_ComponentParameter.GetLength())
t_ComponentParameter = "\"\"";
if(!t_ComponentPLIDParameter.GetLength())
t_ComponentPLIDParameter = "\"\"";
// build the MIME parameters
CString t_MIMETypeParameter;
CString t_SuffixParameter;
CString t_SuffixDescriptionParameter;
FileCount = m_MIMETypeList.GetSize();
for( i = 0; i < FileCount; i++)
{
t_MIMETypeParameter += "\"" + m_MIMETypeList.ElementAt(i) + "\"";
t_SuffixParameter += "\"" + m_SuffixList.ElementAt(i) + "\"";
t_SuffixDescriptionParameter += "\"" + m_SuffixDescriptionList.ElementAt(i) + "\"";
if(i != (FileCount - 1))
{
t_MIMETypeParameter += ", ";;
t_SuffixParameter += ", ";;
t_SuffixDescriptionParameter += ", ";;
}
}
if(!t_MIMETypeParameter.GetLength())
t_MIMETypeParameter = "\"\"";
if(!t_SuffixParameter.GetLength())
t_SuffixParameter = "\"\"";
if(!t_SuffixDescriptionParameter.GetLength())
t_SuffixDescriptionParameter = "\"\"";
CString buffer;
sprintf(buffer.GetBuffer(filler.GetLength() + BUFFER_SIZE), filler, t_PluginParameter, t_PluginPLIDParameter,
t_ComponentParameter, t_ComponentPLIDParameter, m_Plugin_Size_Value, m_Component_Size_Value,
m_Product_Name_Value, m_PLID_Value, m_Plugin_Version_Value, t_MIMETypeParameter, t_SuffixParameter,
t_SuffixDescriptionParameter, m_Company_Name_Value, m_Plugin_Description_Value);
buffer.ReleaseBuffer();
result += header;
result += buffer;
result += body;
}
void CXPIPackagerDlg::OnAutoPLID()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString temp;
temp = "@";
temp += m_Domain_Name_Value;
temp += "/";
temp += m_Product_Name_Value;
temp += ",version=";
temp += m_Plugin_Version_Value;
m_PLID_Value = temp;
UpdateData(false);
}
void CXPIPackagerDlg::OnBigHelp()
{
// TODO: Add your control notification handler code here
CString tempString = "http://devedge.netscape.com/viewsource/2002/xpinstall-guidelines/";
ShellExecute(NULL,"open",tempString,"","",SW_SHOWDEFAULT);
}
void CXPIPackagerDlg::OnPLIDHelp()
{
// TODO: Add your control notification handler code here
CString tempString = "http://www.mozilla.org/projects/plugins/plugin-identifier.html";
ShellExecute(NULL,"open",tempString,"","",SW_SHOWDEFAULT);
}
long CXPIPackagerDlg::CalculateTotalFileSize(const CStringArray* t_Array)
{
// TODO: Add your control notification handler code here
CFile t_File;
CString t_FileName;
int t_NumFiles = t_Array->GetSize();
long t_Size = 0;
for(int i = 0; i < t_NumFiles; i++)
{
t_FileName = t_Array->GetAt(i);
if(t_File.Open(t_FileName, CFile::modeRead))
{
CFileStatus t_FileStatus;
if(t_File.GetStatus(t_FileStatus))
t_Size += t_FileStatus.m_size;
}
t_File.Close();
}
return t_Size;
}
void CXPIPackagerDlg::OnComponentBrowse()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString t_PLID;
CString t_ComponentName;
CString t_ComponentFileName;
CFileChooserDlg dlg(CXPIPackagerApp::XPT_TYPE, m_PLID_Value, t_ComponentFileName, m_Domain_Name_Value, m_Product_Name_Value, m_Plugin_Version_Value, NULL);
if(IDOK == dlg.DoModal())
{
t_ComponentFileName = dlg.GetFileName();
t_PLID = dlg.GetPLIDForFileName();
CFile t_File;
if(t_File.Open(t_ComponentFileName, CFile::modeRead))
{
CFileStatus t_FileStatus;
if(t_File.GetStatus(t_FileStatus))
{
t_ComponentName = t_File.GetFileName();
m_ComponentList.InsertAt(0, t_ComponentName);
m_ComponentFileList.InsertAt(0, t_ComponentFileName);
m_ComponentPLIDList.InsertAt(0, t_PLID);
m_Component_List_Control.InsertItem( 0, "", -1);
m_Component_List_Control.SetItemText( 0, 0, t_ComponentFileName);
m_Component_List_Control.SetItemText( 0, 1, t_PLID);
// re-adjust plugin total size
t_File.Close();
m_ComponentTotalSize = CalculateTotalFileSize(&m_ComponentFileList);
m_Component_Size_Value = m_ComponentTotalSize;
}
}
}
UpdateData(false);
}
void CXPIPackagerDlg::OnComponentRemove()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int t_CurrentSelection = m_Component_List_Control.GetSelectionMark( );
if(t_CurrentSelection == -1)
return;
m_Component_List_Control.DeleteItem(t_CurrentSelection);
m_ComponentList.RemoveAt(t_CurrentSelection);
m_ComponentFileList.RemoveAt(t_CurrentSelection);
m_ComponentPLIDList.RemoveAt(t_CurrentSelection);
// re-adjust size
m_Component_Size_Value = CalculateTotalFileSize(&m_ComponentFileList);
UpdateData(false);
}
void CXPIPackagerDlg::OnPluginBrowse()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CString t_PLID;
CString t_PluginName;
CString t_PluginFileName;
CFileChooserDlg dlg(CXPIPackagerApp::DLL_TYPE, m_PLID_Value, t_PluginFileName, m_Domain_Name_Value, m_Product_Name_Value, m_Plugin_Version_Value, NULL);
if(IDOK == dlg.DoModal())
{
t_PluginFileName = dlg.GetFileName();
t_PLID = dlg.GetPLIDForFileName();
CFile t_File;
if(t_File.Open(t_PluginFileName, CFile::modeRead))
{
CFileStatus t_FileStatus;
if(t_File.GetStatus(t_FileStatus))
{
t_PluginName = t_File.GetFileName();
m_PluginList.InsertAt(0, t_PluginName);
m_PluginFileList.InsertAt(0, t_PluginFileName);
m_PluginPLIDList.InsertAt(0, t_PLID);
m_Plugin_List_Control.InsertItem( 0, "", -1);
m_Plugin_List_Control.SetItemText( 0, 0, t_PluginFileName);
m_Plugin_List_Control.SetItemText( 0, 1, t_PLID);
// re-adjust plugin total size
t_File.Close();
m_PluginTotalSize = CalculateTotalFileSize(&m_PluginFileList);
m_Plugin_Size_Value = m_PluginTotalSize;
}
}
}
UpdateData(false);
}
void CXPIPackagerDlg::OnPluginRemove()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int t_CurrentSelection = m_Plugin_List_Control.GetSelectionMark( );
if(t_CurrentSelection == -1)
return;
m_Plugin_List_Control.DeleteItem(t_CurrentSelection);
m_PluginList.RemoveAt(t_CurrentSelection);
m_PluginFileList.RemoveAt(t_CurrentSelection);
m_PluginPLIDList.RemoveAt(t_CurrentSelection);
// re-adjust size
m_Plugin_Size_Value = CalculateTotalFileSize(&m_PluginFileList);
UpdateData(false);
}
void CXPIPackagerDlg::OnMIMETypeAdd()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(!m_PluginList.GetSize())
{
CString tMessage = "No Plugin File is present in the archive yet. A Plugin File is required to a MIME Type for the Plugin.";
MessageBox(tMessage, "Error: No Plugin File!", MB_OK + MB_ICONEXCLAMATION);
return;
}
CString temp;
CMIMETypeChooseDlg dlg(temp, temp, temp, temp, &m_PluginList, NULL);
if(IDOK == dlg.DoModal())
{
m_MIMETypeList.InsertAt(0, dlg.GetMIMEType());
m_SuffixList.InsertAt(0, dlg.GetSuffix());
m_SuffixDescriptionList.InsertAt(0, dlg.GetSuffixDescription());
m_MIMEPluginList.InsertAt(0, dlg.GetPlugin());
m_MIME_List_Control.InsertItem( 0, "", -1);
m_MIME_List_Control.SetItemText( 0, 0, dlg.GetMIMEType());
m_MIME_List_Control.SetItemText( 0, 1, dlg.GetSuffix());
m_MIME_List_Control.SetItemText( 0, 2, dlg.GetSuffixDescription());
m_MIME_List_Control.SetItemText( 0, 3, dlg.GetPlugin());
}
UpdateData(false);
}
void CXPIPackagerDlg::OnMIMETypeRemove()
{
// TODO: Add your control notification handler code here
UpdateData(true);
int t_CurrentSelection = m_MIME_List_Control.GetSelectionMark( );
if(t_CurrentSelection == -1)
return;
m_MIME_List_Control.DeleteItem(t_CurrentSelection);
m_MIMETypeList.RemoveAt(t_CurrentSelection);
m_SuffixList.RemoveAt(t_CurrentSelection);
m_SuffixDescriptionList.RemoveAt(t_CurrentSelection);
m_MIMEPluginList.RemoveAt(t_CurrentSelection);
UpdateData(false);
}
void CXPIPackagerDlg::OnDblclkPluginList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(true);
int t_CurrentSelection = m_Plugin_List_Control.GetSelectionMark( );
if(t_CurrentSelection == -1)
return;
CString t_PLID = m_PluginPLIDList.ElementAt(t_CurrentSelection);
CString t_PluginName;
CString t_PluginFileName = m_PluginFileList.ElementAt(t_CurrentSelection);
CFileChooserDlg dlg(CXPIPackagerApp::DLL_TYPE, t_PLID, t_PluginFileName, m_Domain_Name_Value, m_Product_Name_Value, m_Plugin_Version_Value, NULL);
if(IDOK == dlg.DoModal())
{
t_PluginFileName = dlg.GetFileName();
t_PLID = dlg.GetPLIDForFileName();
CFile t_File;
if(t_File.Open(t_PluginFileName, CFile::modeRead))
{
CFileStatus t_FileStatus;
if(t_File.GetStatus(t_FileStatus))
{
t_PluginName = t_File.GetFileName();
m_PluginList.RemoveAt(t_CurrentSelection);
m_PluginList.InsertAt(t_CurrentSelection, t_PluginName);
m_PluginFileList.RemoveAt(t_CurrentSelection);
m_PluginFileList.InsertAt(t_CurrentSelection, t_PluginFileName);
m_PluginPLIDList.RemoveAt(t_CurrentSelection);
m_PluginPLIDList.InsertAt(t_CurrentSelection, t_PLID);
//m_Plugin_List_Control.InsertItem( 0, "", -1);
m_Plugin_List_Control.SetItemText( t_CurrentSelection, 0, t_PluginFileName);
m_Plugin_List_Control.SetItemText( t_CurrentSelection, 1, t_PLID);
// re-adjust plugin total size
t_File.Close();
m_PluginTotalSize = CalculateTotalFileSize(&m_PluginFileList);
m_Plugin_Size_Value = m_PluginTotalSize;
}
}
}
UpdateData(false);
*pResult = 0;
}
void CXPIPackagerDlg::OnDblclkComponentList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(true);
int t_CurrentSelection = m_Component_List_Control.GetSelectionMark( );
if(t_CurrentSelection == -1)
return;
CString t_PLID = m_ComponentPLIDList.ElementAt(t_CurrentSelection);
CString t_ComponentName;
CString t_ComponentFileName = m_ComponentFileList.ElementAt(t_CurrentSelection);
CFileChooserDlg dlg(CXPIPackagerApp::XPT_TYPE, t_PLID, t_ComponentFileName, m_Domain_Name_Value, m_Product_Name_Value, m_Plugin_Version_Value, NULL);
if(IDOK == dlg.DoModal())
{
t_ComponentFileName = dlg.GetFileName();
t_PLID = dlg.GetPLIDForFileName();
CFile t_File;
if(t_File.Open(t_ComponentFileName, CFile::modeRead))
{
CFileStatus t_FileStatus;
if(t_File.GetStatus(t_FileStatus))
{
t_ComponentName = t_File.GetFileName();
m_ComponentList.RemoveAt(t_CurrentSelection);
m_ComponentList.InsertAt(t_CurrentSelection, t_ComponentName);
m_ComponentFileList.RemoveAt(t_CurrentSelection);
m_ComponentFileList.InsertAt(t_CurrentSelection, t_ComponentFileName);
m_ComponentPLIDList.RemoveAt(t_CurrentSelection);
m_ComponentPLIDList.InsertAt(t_CurrentSelection, t_PLID);
//m_Plugin_List_Control.InsertItem( 0, "", -1);
m_Component_List_Control.SetItemText( t_CurrentSelection, 0, t_ComponentFileName);
m_Component_List_Control.SetItemText( t_CurrentSelection, 1, t_PLID);
// re-adjust plugin total size
t_File.Close();
m_ComponentTotalSize = CalculateTotalFileSize(&m_ComponentFileList);
m_Component_Size_Value = m_ComponentTotalSize;
}
}
}
UpdateData(false);
*pResult = 0;
}
void CXPIPackagerDlg::OnDblclkMimeList(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
UpdateData(true);
int t_CurrentSelection = m_MIME_List_Control.GetSelectionMark( );
if(t_CurrentSelection == -1)
return;
if(!m_PluginList.GetSize())
{
CString tMessage = "No Plugin File is present in the archive yet. A Plugin File is required to a MIME Type for the Plugin.";
MessageBox(tMessage, "Error: No Plugin File!", MB_OK + MB_ICONEXCLAMATION);
return;
}
CString t_MIMEType = m_MIMETypeList.ElementAt(t_CurrentSelection);
CString t_Suffix = m_SuffixList.ElementAt(t_CurrentSelection);
CString t_SuffixDescription = m_SuffixDescriptionList.ElementAt(t_CurrentSelection);
CString t_Plugin = m_MIMEPluginList.ElementAt(t_CurrentSelection);
CMIMETypeChooseDlg dlg(t_MIMEType, t_Suffix, t_SuffixDescription, t_Plugin, &m_PluginList, NULL);
if(IDOK == dlg.DoModal())
{
m_MIMETypeList.RemoveAt(t_CurrentSelection);
m_SuffixList.RemoveAt(t_CurrentSelection);
m_SuffixDescriptionList.RemoveAt(t_CurrentSelection);
m_MIMEPluginList.RemoveAt(t_CurrentSelection);
m_MIMETypeList.InsertAt(t_CurrentSelection, dlg.GetMIMEType());
m_SuffixList.InsertAt(t_CurrentSelection, dlg.GetSuffix());
m_SuffixDescriptionList.InsertAt(t_CurrentSelection, dlg.GetSuffixDescription());
m_MIMEPluginList.InsertAt(t_CurrentSelection, dlg.GetPlugin());
//m_MIME_List_Control.InsertItem( t_CurrentSelection, "", -1);
m_MIME_List_Control.SetItemText( t_CurrentSelection, 0, dlg.GetMIMEType());
m_MIME_List_Control.SetItemText( t_CurrentSelection, 1, dlg.GetSuffix());
m_MIME_List_Control.SetItemText( t_CurrentSelection, 2, dlg.GetSuffixDescription());
m_MIME_List_Control.SetItemText( t_CurrentSelection, 3, dlg.GetPlugin());
}
UpdateData(false);
*pResult = 0;
}