prntdlgg.cpp
来自「A*算法 A*算法 A*算法 A*算法A*算法A*算法」· C++ 代码 · 共 1,108 行 · 第 1/3 页
CPP
1,108 行
m_rangeRadioBox->SetSelection(0);
m_rangeRadioBox->wxRadioBox::Enable(1, false);
}
}
}
}
m_noCopiesText->SetValue(
wxString::Format(_T("%d"), m_printDialogData.GetNoCopies()));
m_printToFileCheckBox->SetValue(m_printDialogData.GetPrintToFile());
m_printToFileCheckBox->Enable(m_printDialogData.GetEnablePrintToFile());
return true;
}
bool wxGenericPrintDialog::TransferDataFromWindow()
{
long res = 0;
if(m_printDialogData.GetFromPage() != -1)
{
if (m_printDialogData.GetEnablePageNumbers())
{
if(m_fromText)
{
wxString value = m_fromText->GetValue();
if (value.ToLong( &res ))
m_printDialogData.SetFromPage( res );
}
if(m_toText)
{
wxString value = m_toText->GetValue();
if (value.ToLong( &res ))
m_printDialogData.SetToPage( res );
}
}
if(m_rangeRadioBox)
{
if (m_rangeRadioBox->GetSelection() == 0)
{
m_printDialogData.SetAllPages(true);
// This means all pages, more or less
m_printDialogData.SetFromPage(1);
m_printDialogData.SetToPage(32000);
}
else
m_printDialogData.SetAllPages(false);
}
}
else
{ // continuous printing
m_printDialogData.SetFromPage(1);
m_printDialogData.SetToPage(32000);
}
wxString value = m_noCopiesText->GetValue();
if (value.ToLong( &res ))
m_printDialogData.SetNoCopies( res );
m_printDialogData.SetPrintToFile(m_printToFileCheckBox->GetValue());
return true;
}
wxDC *wxGenericPrintDialog::GetPrintDC()
{
return new wxPostScriptDC(GetPrintDialogData().GetPrintData());
}
// ----------------------------------------------------------------------------
// Generic print setup dialog
// ----------------------------------------------------------------------------
IMPLEMENT_CLASS(wxGenericPrintSetupDialog, wxDialog)
BEGIN_EVENT_TABLE(wxGenericPrintSetupDialog, wxDialog)
EVT_LIST_ITEM_ACTIVATED(wxPRINTID_PRINTER, wxGenericPrintSetupDialog::OnPrinter)
END_EVENT_TABLE()
wxGenericPrintSetupDialog::wxGenericPrintSetupDialog(wxWindow *parent, wxPrintData* data):
wxDialog(parent, wxID_ANY, _("Print Setup"), wxPoint(0,0), wxSize(600, 600), wxDEFAULT_DIALOG_STYLE|wxTAB_TRAVERSAL)
{
Init(data);
}
/* XPM */
static const char * check_xpm[] = {
/* width height ncolors chars_per_pixel */
"16 16 3 1",
/* colors */
" s None c None",
"X c #000000",
". c #808080",
/* pixels */
" ",
" ",
" ",
" .. ",
" XX ",
" XX. ",
" .XX ",
" XX ",
" X XX. ",
" XX .XX ",
" XX XX ",
" XXXX. ",
" XX. ",
" . ",
" ",
" "
};
void wxGenericPrintSetupDialog::Init(wxPrintData* data)
{
if ( data )
m_printData = *data;
m_targetData = data;
wxBoxSizer *main_sizer = new wxBoxSizer( wxVERTICAL );
// printer selection
wxStaticBoxSizer *printer_sizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Printer") ), wxVERTICAL );
main_sizer->Add( printer_sizer, 0, wxALL|wxGROW, 10 );
m_printerListCtrl = new wxListCtrl( this, wxPRINTID_PRINTER,
wxDefaultPosition, wxSize(wxDefaultCoord,100), wxLC_REPORT|wxLC_SINGLE_SEL|wxSUNKEN_BORDER );
wxImageList *image_list = new wxImageList;
image_list->Add( wxBitmap(check_xpm) );
m_printerListCtrl->AssignImageList( image_list, wxIMAGE_LIST_SMALL );
m_printerListCtrl->InsertColumn( 0, wxT(" "), wxLIST_FORMAT_LEFT, 20 );
m_printerListCtrl->InsertColumn( 1, wxT("Printer"), wxLIST_FORMAT_LEFT, 150 );
m_printerListCtrl->InsertColumn( 2, wxT("Device"), wxLIST_FORMAT_LEFT, 150 );
m_printerListCtrl->InsertColumn( 3, wxT("Status"), wxLIST_FORMAT_LEFT, 80 );
wxListItem item;
item.SetMask( wxLIST_MASK_TEXT );
item.SetColumn( 1 );
item.SetText( _("Default printer") );
item.SetId( m_printerListCtrl->InsertItem( item ) );
if (data->GetPrinterName().empty())
{
wxListItem item2;
item2.SetId( item.GetId() );
item2.SetMask( wxLIST_MASK_IMAGE );
item2.SetImage( 0 );
m_printerListCtrl->SetItem( item2 );
// also select item
m_printerListCtrl->SetItemState( item.GetId(), wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED );
}
item.SetId( 1+ item.GetId() );
wxArrayString errors;
wxArrayString output;
long res = wxExecute( wxT("lpstat -v"), output, errors, wxEXEC_NODISABLE );
if (res >= 0 && errors.GetCount() == 0)
{
size_t i;
for (i = 0; i < output.GetCount(); i++)
{
wxStringTokenizer tok( output[i], wxT(" ") );
wxString tmp = tok.GetNextToken(); // "device"
if (tmp != wxT("device"))
break; // the lpstat syntax must have changed.
tmp = tok.GetNextToken(); // "for"
if (tmp != wxT("for"))
break; // the lpstat syntax must have changed.
tmp = tok.GetNextToken(); // "hp_deskjet930c:"
if (tmp[tmp.Len()-1] == wxT(':'))
tmp.Remove(tmp.Len()-1,1);
wxString name = tmp;
item.SetText( name );
item.SetId( m_printerListCtrl->InsertItem( item ) );
tmp = tok.GetNextToken(); // "parallel:/dev/lp0"
item.SetColumn( 2 );
item.SetText( tmp );
m_printerListCtrl->SetItem( item );
if (data->GetPrinterName() == name)
{
wxListItem item2;
item2.SetId( item.GetId() );
item2.SetMask( wxLIST_MASK_IMAGE );
item2.SetImage( 0 );
m_printerListCtrl->SetItem( item2 );
// also select item
m_printerListCtrl->SetItemState( item.GetId(), wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED );
}
wxString command = wxT("lpstat -p ");
command += name;
wxArrayString errors2;
wxArrayString output2;
res = wxExecute( command, output2, errors2, wxEXEC_NODISABLE );
if (res >= 0 && errors2.GetCount() == 0 && output2.GetCount() > 0)
{
tmp = output2[0]; // "printer hp_deskjet930c is idle. enable since ..."
int pos = tmp.Find( wxT('.') );
if (pos != wxNOT_FOUND)
tmp.Remove( (size_t)pos, tmp.Len()-(size_t)pos );
wxStringTokenizer tok2( tmp, wxT(" ") );
tmp = tok2.GetNextToken(); // "printer"
tmp = tok2.GetNextToken(); // "hp_deskjet930c"
tmp = wxEmptyString;
while (tok2.HasMoreTokens())
{
tmp += tok2.GetNextToken();
tmp += wxT(" ");
}
item.SetColumn( 3 );
item.SetText( tmp );
m_printerListCtrl->SetItem( item );
}
item.SetColumn( 1 );
item.SetId( 1+ item.GetId() );
}
}
printer_sizer->Add( m_printerListCtrl, 0, wxALL|wxGROW, 5 );
wxBoxSizer *item1 = new wxBoxSizer( wxHORIZONTAL );
main_sizer->Add( item1, 0, wxALL, 5 );
// printer options (on the left)
wxBoxSizer *item2 = new wxBoxSizer( wxVERTICAL );
wxStaticBox *item4 = new wxStaticBox( this, wxPRINTID_STATIC, _("Paper size") );
wxStaticBoxSizer *item3 = new wxStaticBoxSizer( item4, wxVERTICAL );
m_paperTypeChoice = CreatePaperTypeChoice();
item3->Add( m_paperTypeChoice, 0, wxALIGN_CENTER|wxALL, 5 );
item2->Add( item3, 0, wxALIGN_CENTER|wxALL, 5 );
wxString strs6[] =
{
_("Portrait"),
_("Landscape")
};
m_orientationRadioBox= new wxRadioBox( this, wxPRINTID_ORIENTATION, _("Orientation"), wxDefaultPosition, wxDefaultSize, 2, strs6, 1, wxRA_SPECIFY_ROWS );
item2->Add( m_orientationRadioBox, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
wxStaticBox *item8 = new wxStaticBox( this, wxID_ANY, _("Options") );
wxStaticBoxSizer *item7 = new wxStaticBoxSizer( item8, wxHORIZONTAL );
m_colourCheckBox = new wxCheckBox( this, wxPRINTID_PRINTCOLOUR, _("Print in colour") );
item7->Add( m_colourCheckBox, 0, wxALIGN_CENTER|wxALL, 5 );
item2->Add( item7, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
item1->Add( item2, 0, wxALIGN_CENTER_HORIZONTAL, 5 );
// spooling options (on the right)
wxStaticBox *item11 = new wxStaticBox( this, wxID_ANY, _("Print spooling") );
wxStaticBoxSizer *item10 = new wxStaticBoxSizer( item11, wxVERTICAL );
wxStaticText *item12 = new wxStaticText( this, wxID_ANY, _("Printer command:") );
item10->Add( item12, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
wxBoxSizer *item13 = new wxBoxSizer( wxHORIZONTAL );
item13->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
m_printerCommandText = new wxTextCtrl( this, wxPRINTID_COMMAND, wxEmptyString, wxDefaultPosition, wxSize(160,wxDefaultCoord) );
item13->Add( m_printerCommandText, 0, wxALIGN_CENTER|wxALL, 5 );
item10->Add( item13, 0, wxALIGN_CENTER|wxALL, 0 );
wxStaticText *item15 = new wxStaticText( this, wxID_ANY, _("Printer options:") );
item10->Add( item15, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 );
wxBoxSizer *item16 = new wxBoxSizer( wxHORIZONTAL );
item16->Add( 20, 20, 0, wxALIGN_CENTER|wxALL, 5 );
m_printerOptionsText = new wxTextCtrl( this, wxPRINTID_OPTIONS, wxEmptyString, wxDefaultPosition, wxSize(160,wxDefaultCoord) );
item16->Add( m_printerOptionsText, 0, wxALIGN_CENTER|wxALL, 5 );
item10->Add( item16, 0, wxALIGN_CENTER|wxALL, 0 );
item1->Add( item10, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 );
#if wxUSE_STATLINE
// static line
main_sizer->Add( new wxStaticLine( this, wxID_ANY ), 0, wxEXPAND | wxLEFT|wxRIGHT|wxTOP, 10 );
#endif
// buttons
main_sizer->Add( CreateButtonSizer( wxOK|wxCANCEL), 0, wxEXPAND|wxALL, 10 );
SetAutoLayout( true );
SetSizer( main_sizer );
main_sizer->Fit( this );
Centre(wxBOTH);
Fit();
Centre(wxBOTH);
InitDialog();
}
wxGenericPrintSetupDialog::~wxGenericPrintSetupDialog()
{
}
void wxGenericPrintSetupDialog::OnPrinter(wxListEvent& event)
{
// Delete check mark
long item;
for (item = 0; item < m_printerListCtrl->GetItemCount(); item++)
m_printerListCtrl->SetItemImage( item, -1 );
m_printerListCtrl->SetItemImage( event.GetIndex(), 0 );
if (event.GetIndex() == 0)
{
m_printerCommandText->SetValue( wxT("lpr") );
}
else
{
wxString tmp = wxT("lpr -P");
wxListItem item;
item.SetColumn( 1 );
item.SetMask( wxLIST_MASK_TEXT );
item.SetId( event.GetIndex() );
m_printerListCtrl->GetItem( item );
tmp += item.GetText();
m_printerCommandText->SetValue( tmp );
}
}
bool wxGenericPrintSetupDialog::TransferDataToWindow()
{
wxPostScriptPrintNativeData *data =
(wxPostScriptPrintNativeData *) m_printData.GetNativeData();
if (m_printerCommandText && data->GetPrinterCommand())
m_printerCommandText->SetValue(data->GetPrinterCommand());
if (m_printerOptionsText && data->GetPrinterOptions())
m_printerOptionsText->SetValue(data->GetPrinterOptions());
if (m_colourCheckBox)
m_colourCheckBox->SetValue(m_printData.GetColour());
if (m_orientationRadioBox)
{
if (m_printData.GetOrientation() == wxPORTRAIT)
m_orientationRadioBox->SetSelection(0);
else
m_orientationRadioBox->SetSelection(1);
}
return true;
}
bool wxGenericPrintSetupDialog::TransferDataFromWindow()
{
wxPostScriptPrintNativeData *data =
(wxPostScriptPrintNativeData *) m_printData.GetNativeData();
// find selected printer
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?