Changeset 221

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.

Location:
trunk/src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/IPrintView.h

    r220 r221  
    6262 
    6363            /// 
     64            /// @brief Adds a new page size to the list. 
     65            /// 
     66            /// @param name The possibly translated name of the page size. 
     67            /// @param value The value the ePDFView internally uses to know 
     68            ///              which page size is. 
     69            /// 
     70            virtual void addPageSize (const gchar *name,  
     71                                      const gchar *value) = 0; 
     72 
     73            /// 
    6474            /// @brief Adds a new printer to the list of printer. 
    6575            /// 
     
    7787 
    7888            /// 
     89            /// @brief Deletes all sizes from the list of page sizes. 
     90            /// 
     91            virtual void clearPageSizeList (void) = 0; 
     92 
     93            /// 
    7994            /// @brief Gets the number of copies to do. 
    8095            /// 
     
    85100 
    86101            /// 
     102            /// @brief Gets the name of the currently selected printer. 
     103            /// 
     104            /// @return The name of the printer that is currently selected. 
     105            ///         The name returned is the same as the name passed 
     106            ///         to the view using the addPrinter() function. 
     107            /// 
     108            virtual gchar *getSelectedPrinterName (void) = 0; 
     109 
     110            /// 
    87111            /// @brief Check is the "All Pages" range option is selected. 
    88112            /// 
     
    91115            /// 
    92116            virtual gboolean isSelectedAllPagesRangeOption (void) = 0; 
     117 
     118            /// 
     119            /// @brief Selects a page size. 
     120            /// 
     121            /// @param pageSizeInde The index of the page size to select. 
     122            /// 
     123            virtual void selectPageSize (unsigned int pageSizeIndex) = 0; 
    93124 
    94125            /// 
  • trunk/src/PrintPter.cxx

    r220 r221  
    1919#include <cups/cups.h> 
    2020#include <cups/ipp.h> 
     21#include <cups/ppd.h> 
    2122#include <locale.h> 
    2223#include "epdfview.h" 
     
    99100 
    100101void 
    101 PrintPter::printActivated (void) 
    102 { 
    103     // Once done, is the same as canceled :-) 
     102PrintPter::printActivated () 
     103{ 
     104    // Once done, it's the same as canceled :-) 
    104105    cancelActivated (); 
     106} 
     107 
     108void 
     109PrintPter::printerSelectionChanged () 
     110{ 
     111    IPrintView &view = getView (); 
     112 
     113    gchar *printerName = view.getSelectedPrinterName (); 
     114    if ( NULL != printerName ) 
     115    { 
     116        const gchar *printerPPDName = cupsGetPPD (printerName); 
     117        if ( NULL != printerPPDName ) 
     118        { 
     119            ppd_file_t *printerPPD = ppdOpenFile (printerPPDName); 
     120            if ( NULL != printerPPD ) 
     121            { 
     122                view.clearPageSizeList (); 
     123                int pageSizeToSelect = 1; 
     124                for ( int currentSize = 0 ; 
     125                      currentSize < printerPPD->num_sizes ; 
     126                      ++currentSize ) 
     127                { 
     128                    const gchar *sizeName = printerPPD->sizes[currentSize].name; 
     129                    view.addPageSize (_(sizeName), sizeName); 
     130                } 
     131                view.selectPageSize (pageSizeToSelect); 
     132                ppdClose (printerPPD); 
     133            } 
     134        } 
     135        g_free (printerName); 
     136    } 
    105137} 
    106138 
     
    244276            view.selectPrinter (printerToSelect); 
    245277        } 
    246     } 
    247 } 
     278        // The selection has been changed before the 
     279        // view could connect the signals, so here we'll set the selected 
     280        // printer's page sizes "by hand". 
     281        printerSelectionChanged (); 
     282    } 
     283} 
  • trunk/src/PrintPter.h

    r219 r221  
    2424namespace ePDFView 
    2525{ 
     26    /// 
     27    /// @enum PrintPageOrientation. 
     28    /// 
     29    enum PrintPageOrientation 
     30    { 
     31        PRINT_PAGE_ORIENTATION_PORTRAIT, 
     32        PRINT_PAGE_ORIENTATION_LANDSCAPE 
     33    }; 
     34 
     35    /// 
     36    /// @enum PrintPageLayout 
     37    /// 
     38    enum PrintPageLayout 
     39    { 
     40        PRINT_PAGE_LAYOUT_PLAIN, 
     41        PRINT_PAGE_LAYOUT_2IN1, 
     42        PRINT_PAGE_LAYOUT_4IN1 
     43    }; 
    2644 
    2745    /// 
     
    4260            void pageRangeOptionChanged (void); 
    4361            void printActivated (void); 
     62            void printerSelectionChanged (void); 
    4463 
    4564        protected: 
  • 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} 
  • trunk/src/gtk/PrintView.h

    r220 r221  
    2929            virtual void setPresenter (PrintPter *pter); 
    3030 
     31            virtual void addPageSize (const gchar *name, 
     32                                      const gchar *value); 
    3133            virtual void addPrinter (const gchar *name, int jobs, 
    3234                                     const gchar *state, 
    3335                                     const gchar *location); 
     36            virtual void clearPageSizeList (void); 
    3437            virtual unsigned int getNumberOfCopies (void); 
     38            virtual gchar *getSelectedPrinterName (void); 
    3539            virtual gboolean isSelectedAllPagesRangeOption (void); 
    36             virtual void selectPrinter (unsigned int printerInde); 
     40            virtual void selectPageSize (unsigned int pageSizeIndex); 
     41            virtual void selectPrinter (unsigned int printerIndex); 
    3742            virtual void sensitiveCollate (gboolean sensitive); 
    3843            virtual void sensitivePageRange (gboolean sensitive); 
     
    4348            GtkWidget *m_Collate; 
    4449            GtkWidget *m_CustomPagesRangeOption; 
     50            GtkListStore *m_Layout; 
     51            GtkWidget *m_LayoutView; 
    4552            GtkWidget *m_NumberOfCopies; 
     53            GtkListStore *m_Orientation; 
     54            GtkWidget *m_OrientationView; 
    4655            GtkWidget *m_PageRange; 
     56            GtkListStore *m_PageSize; 
     57            GtkWidget *m_PageSizeView; 
    4758            GtkWidget *m_PrintDialog; 
    4859            GtkListStore *m_PrinterList; 
     
    5263            GtkWidget *createPaperTab (void); 
    5364            GtkWidget *createPrinterTab (void); 
     65 
     66            void createLayoutListModel (void); 
     67            void createOrientationListModel (void); 
     68            void createPageSizeListModel (void); 
     69            void createPrinterListModel (void); 
    5470    }; 
    5571}