예제 #1
0
 function __create_box()
 {
     $iv = new GtkIconView();
     $model = new GtkListStore(GdkPixbuf::gtype, GObject::TYPE_STRING);
     $iv->set_model($model);
     $iv->set_columns(1);
     $ids = Gtk::stock_list_ids();
     sort($ids);
     foreach ($ids as $id) {
         $pixbuf = $iv->render_icon($id, Gtk::ICON_SIZE_DIALOG);
         $model->set($model->append(), 0, $pixbuf, 1, $id);
     }
     $iv->set_pixbuf_column(0);
     $iv->set_text_column(1);
     //multi select incl. zooming up an rectangle to select icons
     $iv->set_selection_mode(Gtk::SELECTION_MULTIPLE);
     //labels at the right side
     $iv->set_orientation(Gtk::ORIENTATION_HORIZONTAL);
     //enough place for the text so that it doesn't wrap
     $iv->set_item_width(200);
     //spacing between icon and label
     $iv->set_spacing(0);
     //spacing between single rows
     $iv->set_row_spacing(0);
     //spacing between cols
     //margin from the edges of the view widget -> like the CSS margin property
     $iv->set_margin(5);
     //in how many columns the view will be split
     //Icon order (for 3 columns):
     // 1    2    3
     // 4    5    6
     //FIXME: is there a way to arrange it horizontally so that it's arranged that way:
     // 1    4    7
     // 2    5    8
     // 3    6    9   ?
     //0 is auto-fit
     $iv->set_columns(0);
     $editor = new WidgetEditor($iv, array(array('selection_mode', GtkComboBox::gtype, 'Gtk::SELECTION_'), array('orientation', GtkComboBox::gtype, 'Gtk::ORIENTATION_'), array('item_width', GtkScale::gtype, 0, 500), array('spacing', GtkScale::gtype, -100, 100), array('row_spacing', GtkScale::gtype, -100, 100), array('column_spacing', GtkScale::gtype, -100, 100), array('margin', GtkScale::gtype, -100, 200), array('columns', GtkScale::gtype, 0, 20)));
     $scrollwin = new GtkScrolledWindow();
     $scrollwin->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
     $scrollwin->add($iv);
     return $scrollwin;
 }
예제 #2
0
 private function create_model()
 {
     $store = new GtkListStore(GObject::TYPE_PHP_VALUE, GObject::TYPE_STRING);
     $ids = Gtk::stock_list_ids();
     sort($ids);
     foreach ($ids as $id) {
         $info = new StockItemInfo($id);
         $stock_item = Gtk::stock_lookup($id);
         if ($stock_item) {
             $info->stock_item = $stock_item;
         } else {
             $info->stock_item = array('', '', 0, 0, '');
         }
         $icon_set = GtkIconFactory::lookup_default($id);
         if ($icon_set) {
             $sizes = $icon_set->get_sizes();
             $size = $sizes[0];
             for ($i = 0; $i < count($sizes); $i++) {
                 if ($sizes[$i] == Gtk::ICON_SIZE_MENU) {
                     $size = Gtk::ICON_SIZE_MENU;
                     break;
                 }
             }
             $info->small_icon = $this->render_icon($info->stock_id, $size);
             if ($size != Gtk::ICON_SIZE_MENU) {
                 list($width, $height) = Gtk::icon_size_lookup(Gtk::ICON_SIZE_MENU);
                 $info->small_icon = $info->small_icon->scale_simple($width, $height, 'bilinear');
             }
         } else {
             $info->small_icon = null;
         }
         if ($info->stock_item[3] == 0) {
             $info->accel_str = '';
         } else {
             $info->accel_str = '<' . Gtk::accelerator_get_label($info->stock_item[3], $info->stock_item[2]) . '>';
         }
         $iter = $store->append();
         $store->set($iter, 0, $info, 1, $id);
     }
     return $store;
 }