Show
Ignore:
Timestamp:
06/11/06 11:05:39 (2 years ago)
Author:
jordi
Message:

When a printer is selected, the presenter clears the page sizes and fills it with the available printer's page size.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/gtk/PrintView.cxx

    r220 r221  
    3434} printerListColumns; 
    3535 
     36static enum 
     37{ 
     38    printOrientationLabelColumn, 
     39    printOrientationValueColumn, 
     40    printOrientationNumColumn 
     41} printOritentationColumns; 
     42 
     43static enum 
     44{ 
     45    printLayoutLabelColumn, 
     46    printLayoutValueColumn, 
     47    printLayoutNumColumn 
     48} printLayoutColumns; 
     49 
     50static enum 
     51{ 
     52    pageSizeNameColumn, 
     53    pageSizeValueColumn, 
     54    pageSizeNumColumn 
     55} pageSizeColumns; 
     56 
    3657// Callbacks. 
    3758static void print_view_number_of_copies_changed (GtkSpinButton *, gpointer); 
    3859static void print_view_page_range_option_changed (GtkToggleButton *, gpointer); 
     60static void print_view_printer_selection_changed (GtkTreeSelection *, gpointer); 
    3961 
    4062PrintView::PrintView (GtkWindow *parent): 
     
    96118                      G_CALLBACK (print_view_page_range_option_changed), 
    97119                      pter); 
     120    GtkTreeSelection *selection = 
     121        gtk_tree_view_get_selection (GTK_TREE_VIEW (m_PrinterListView)); 
     122    g_signal_connect (G_OBJECT (selection), "changed", 
     123                      G_CALLBACK (print_view_printer_selection_changed), 
     124                      pter); 
    98125 
    99126    // Run the dialog. 
     
    109136 
    110137void 
     138PrintView::addPageSize (const gchar *name, const gchar *value) 
     139{ 
     140    GtkTreeIter pageSizeIter; 
     141    gtk_list_store_append (m_PageSize, &pageSizeIter); 
     142    gtk_list_store_set (m_PageSize, &pageSizeIter, 
     143                        pageSizeNameColumn, name, 
     144                        pageSizeValueColumn, value, 
     145                        -1); 
     146} 
     147 
     148void 
    111149PrintView::addPrinter (const gchar *name, int jobs, const gchar *state, 
    112150                       const gchar *location) 
    113151{ 
    114152    GtkTreeIter printerIter; 
    115     gtk_list_store_append (GTK_LIST_STORE (m_PrinterList), &printerIter); 
    116     gtk_list_store_set (GTK_LIST_STORE (m_PrinterList), &printerIter, 
     153    gtk_list_store_append (m_PrinterList, &printerIter); 
     154    gtk_list_store_set (m_PrinterList, &printerIter, 
    117155                        printerListNameColumn, name, 
    118156                        printerListJobsColumn, jobs, 
     
    122160} 
    123161 
     162void 
     163PrintView::clearPageSizeList () 
     164{ 
     165    gtk_list_store_clear (m_PageSize); 
     166} 
     167 
    124168unsigned int 
    125169PrintView::getNumberOfCopies () 
     
    128172} 
    129173 
     174gchar * 
     175PrintView::getSelectedPrinterName () 
     176{ 
     177    gchar *printerName = NULL; 
     178    GtkTreeSelection *selectedPrinter = 
     179        gtk_tree_view_get_selection (GTK_TREE_VIEW (m_PrinterListView)); 
     180    GtkTreeIter selectedPrinterIter; 
     181    if ( gtk_tree_selection_get_selected (selectedPrinter, NULL, 
     182                                          &selectedPrinterIter) ) 
     183    { 
     184        gtk_tree_model_get (GTK_TREE_MODEL (m_PrinterList), 
     185                            &selectedPrinterIter, 
     186                            printerListNameColumn, &printerName, 
     187                            -1); 
     188    } 
     189 
     190    return printerName; 
     191} 
     192 
    130193gboolean 
    131194PrintView::isSelectedAllPagesRangeOption () 
    132195{ 
    133196    return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (m_AllPagesRangeOption)); 
     197} 
     198 
     199void 
     200PrintView::selectPageSize (unsigned int pageSizeIndex) 
     201{ 
     202    gtk_combo_box_set_active (GTK_COMBO_BOX (m_PageSizeView), pageSizeIndex); 
    134203} 
    135204 
     
    169238 
    170239//////////////////////////////////////////////////////////////// 
    171 // TabCreators 
     240// Tab Creators 
    172241//////////////////////////////////////////////////////////////// 
    173242 
     
    305374    gtk_misc_set_alignment (GTK_MISC (paperSizeLabel), 1.0, 0.5); 
    306375    gtk_label_set_use_underline (GTK_LABEL (paperSizeLabel), TRUE); 
    307     GtkWidget *paperSizeCombo = gtk_combo_box_new (); 
    308     gtk_label_set_mnemonic_widget (GTK_LABEL (paperSizeLabel), paperSizeCombo); 
     376    createPageSizeListModel (); 
     377    m_PageSizeView = gtk_combo_box_new_with_model (GTK_TREE_MODEL (m_PageSize)); 
     378    gtk_label_set_mnemonic_widget (GTK_LABEL (paperSizeLabel), m_PageSizeView); 
     379    { 
     380        GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); 
     381        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (m_PageSizeView), 
     382                                    renderer, TRUE); 
     383        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (m_PageSizeView), 
     384                                        renderer, 
     385                                        "text", 
     386                                        printOrientationLabelColumn, NULL); 
     387    } 
    309388    gtk_table_attach (GTK_TABLE (paperTable), paperSizeLabel, 
    310389                      0, 1, 0, 1, 
     
    312391                      (GtkAttachOptions)(GTK_SHRINK), 
    313392                      0, 0); 
    314     gtk_table_attach (GTK_TABLE (paperTable), paperSizeCombo, 
     393    gtk_table_attach (GTK_TABLE (paperTable), m_PageSizeView, 
    315394                      1, 2, 0, 1, 
    316395                      (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 
    317396                      (GtkAttachOptions)(GTK_SHRINK), 
    318397                      0, 0); 
    319     // Page orientation and combobox 
     398    // Page orientation label and combobox 
    320399    GtkWidget *pageOrientationLabel = gtk_label_new (_("Page _orientation:")); 
    321400    gtk_misc_set_alignment (GTK_MISC (pageOrientationLabel), 1.0, 0.5); 
    322401    gtk_label_set_use_underline (GTK_LABEL (pageOrientationLabel), TRUE); 
    323     GtkWidget *pageOrientationCombo = gtk_combo_box_new (); 
     402 
     403    createOrientationListModel (); 
     404    m_OrientationView = 
     405        gtk_combo_box_new_with_model (GTK_TREE_MODEL (m_Orientation)); 
    324406    gtk_label_set_mnemonic_widget (GTK_LABEL (pageOrientationLabel), 
    325                                    pageOrientationCombo); 
     407                                   m_OrientationView); 
     408    { 
     409        GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); 
     410        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (m_OrientationView), 
     411                                    renderer, TRUE); 
     412        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (m_OrientationView), 
     413                                        renderer, 
     414                                        "text", 
     415                                        printOrientationLabelColumn, NULL); 
     416    } 
     417    gtk_combo_box_set_active (GTK_COMBO_BOX (m_OrientationView), 0); 
     418 
    326419    gtk_table_attach (GTK_TABLE (paperTable), pageOrientationLabel, 
    327420                      0, 1, 1, 2, 
     
    329422                      (GtkAttachOptions)(GTK_SHRINK), 
    330423                      0, 0); 
    331     gtk_table_attach (GTK_TABLE (paperTable), pageOrientationCombo, 
     424    gtk_table_attach (GTK_TABLE (paperTable), m_OrientationView, 
    332425                      1, 2, 1, 2, 
    333426                      (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 
     
    338431    gtk_misc_set_alignment (GTK_MISC (layoutLabel), 1.0, 0.5); 
    339432    gtk_label_set_use_underline (GTK_LABEL (layoutLabel), TRUE); 
    340     GtkWidget *layoutCombo = gtk_combo_box_new (); 
    341     gtk_label_set_mnemonic_widget (GTK_LABEL (layoutLabel), layoutCombo); 
     433 
     434    createLayoutListModel (); 
     435    m_LayoutView = gtk_combo_box_new_with_model (GTK_TREE_MODEL (m_Layout)); 
     436    gtk_label_set_mnemonic_widget (GTK_LABEL (layoutLabel), m_LayoutView); 
     437    { 
     438        GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); 
     439        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (m_LayoutView), 
     440                                    renderer, TRUE); 
     441        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (m_LayoutView), 
     442                                        renderer, 
     443                                        "text", printLayoutLabelColumn, NULL); 
     444    } 
     445    gtk_combo_box_set_active (GTK_COMBO_BOX (m_LayoutView), 0); 
     446 
    342447    gtk_table_attach (GTK_TABLE (paperTable), layoutLabel, 
    343448                      0, 1, 2, 3, 
     
    345450                      (GtkAttachOptions)(GTK_SHRINK), 
    346451                      0, 0); 
    347     gtk_table_attach (GTK_TABLE (paperTable), layoutCombo, 
     452    gtk_table_attach (GTK_TABLE (paperTable), m_LayoutView, 
    348453                      1, 2, 2, 3, 
    349454                      (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 
     
    360465    gtk_container_set_border_width (GTK_CONTAINER (mainBox), 3); 
    361466 
    362     m_PrinterList = gtk_list_store_new (printerListNumColumn, 
    363                                         G_TYPE_STRING, 
    364                                         G_TYPE_STRING, 
    365                                         G_TYPE_INT, 
    366                                         G_TYPE_STRING); 
     467    createPrinterListModel (); 
    367468    m_PrinterListView = 
    368469        gtk_tree_view_new_with_model (GTK_TREE_MODEL (m_PrinterList)); 
     
    409510 
    410511//////////////////////////////////////////////////////////////// 
     512// Model Creators 
     513//////////////////////////////////////////////////////////////// 
     514 
     515void 
     516PrintView::createLayoutListModel () 
     517{ 
     518    m_Layout = gtk_list_store_new (printLayoutNumColumn, 
     519                                   G_TYPE_STRING,  // Label 
     520                                   G_TYPE_INT);    // Value 
     521 
     522    GtkTreeIter iter; 
     523    gtk_list_store_append (m_Layout, &iter); 
     524    gtk_list_store_set (m_Layout, &iter, 
     525                        printLayoutLabelColumn, _("Plain"), 
     526                        printLayoutValueColumn, PRINT_PAGE_LAYOUT_PLAIN, 
     527                        -1); 
     528 
     529    gtk_list_store_append (m_Layout, &iter); 
     530    gtk_list_store_set (m_Layout, &iter, 
     531                        printLayoutLabelColumn, _("2 pages in 1"), 
     532                        printLayoutValueColumn, PRINT_PAGE_LAYOUT_2IN1, 
     533                        -1); 
     534 
     535    gtk_list_store_append (m_Layout, &iter); 
     536    gtk_list_store_set (m_Layout, &iter, 
     537                        printLayoutLabelColumn, _("4 pages in 1"), 
     538                        printLayoutValueColumn, PRINT_PAGE_LAYOUT_4IN1, 
     539                        -1); 
     540} 
     541 
     542void 
     543PrintView::createOrientationListModel () 
     544{ 
     545    m_Orientation = gtk_list_store_new (printOrientationNumColumn, 
     546                                        G_TYPE_STRING,  // Label 
     547                                        G_TYPE_INT);    // Value 
     548 
     549    GtkTreeIter iter; 
     550    gtk_list_store_append (m_Orientation, &iter); 
     551    gtk_list_store_set (m_Orientation, &iter, 
     552                printOrientationLabelColumn, _("Portrait"), 
     553                printOrientationValueColumn, PRINT_PAGE_ORIENTATION_PORTRAIT, 
     554                -1); 
     555 
     556    gtk_list_store_append (m_Orientation, &iter); 
     557    gtk_list_store_set (m_Orientation, &iter, 
     558                printLayoutLabelColumn, _("Landscape"), 
     559                printOrientationValueColumn, PRINT_PAGE_ORIENTATION_LANDSCAPE, 
     560                -1); 
     561} 
     562 
     563void 
     564PrintView::createPageSizeListModel () 
     565{ 
     566    m_PageSize = gtk_list_store_new (pageSizeNumColumn, 
     567                                     G_TYPE_STRING,  // Label 
     568                                     G_TYPE_STRING); // Value 
     569} 
     570 
     571void 
     572PrintView::createPrinterListModel () 
     573{ 
     574    m_PrinterList = 
     575        gtk_list_store_new (printerListNumColumn, 
     576                            G_TYPE_STRING,  // Name 
     577                            G_TYPE_STRING,  // State 
     578                            G_TYPE_INT,     // Jobs 
     579                            G_TYPE_STRING); // Location 
     580 
     581} 
     582 
     583//////////////////////////////////////////////////////////////// 
    411584// Callbacks 
    412585//////////////////////////////////////////////////////////////// 
     
    429602    pter->pageRangeOptionChanged (); 
    430603} 
     604 
     605void 
     606print_view_printer_selection_changed (GtkTreeSelection *sel, gpointer data) 
     607{ 
     608    g_assert (NULL != data && "The data parameter is NULL."); 
     609 
     610    PrintPter *pter = (PrintPter *)data; 
     611    pter->printerSelectionChanged (); 
     612}