~teejee2008/timeshift/trunk

« back to all changes in this revision

Viewing changes to src/Gtk/GtkHelper.vala

  • Committer: Tony George
  • Date: 2016-08-28 04:41:17 UTC
  • Revision ID: tony.george.kol@gmail.com-20160828044117-5uwh25dpbagm9181
Moved UI helper code to GtkHelper

Show diffs side-by-side

added added

removed removed

Lines of Context:
444
444
                }
445
445
                return filter;
446
446
        }
 
447
 
 
448
        // utility ------------------
 
449
 
 
450
        // add_notebook
 
451
        private Gtk.Notebook add_notebook(
 
452
                Gtk.Box box, bool show_tabs = true, bool show_border = true){
 
453
                        
 
454
        // notebook
 
455
                var book = new Gtk.Notebook();
 
456
                book.margin = 6;
 
457
                book.show_tabs = show_tabs;
 
458
                book.show_border = show_border;
 
459
                
 
460
                box.pack_start(book, true, true, 0);
 
461
                
 
462
                return book;
 
463
        }
 
464
 
 
465
        // add_tab
 
466
        private Gtk.Box add_tab(
 
467
                Gtk.Notebook book, string title, int margin = 6, int spacing = 6){
 
468
                        
 
469
                // label
 
470
                var label = new Gtk.Label(title);
 
471
 
 
472
        // vbox
 
473
        var vbox = new Box (Gtk.Orientation.VERTICAL, spacing);
 
474
        vbox.margin = margin;
 
475
        book.append_page (vbox, label);
 
476
 
 
477
        return vbox;
 
478
        }
 
479
 
 
480
        // add_treeview
 
481
        private Gtk.TreeView add_treeview(Gtk.Box box,
 
482
                Gtk.SelectionMode selection_mode = Gtk.SelectionMode.SINGLE){
 
483
                        
 
484
                // TreeView
 
485
                var treeview = new TreeView();
 
486
                treeview.get_selection().mode = selection_mode;
 
487
                treeview.set_rules_hint (true);
 
488
                treeview.show_expanders = true;
 
489
                treeview.enable_tree_lines = true;
 
490
 
 
491
                // ScrolledWindow
 
492
                var scrollwin = new ScrolledWindow(null, null);
 
493
                scrollwin.set_shadow_type (ShadowType.ETCHED_IN);
 
494
                scrollwin.add (treeview);
 
495
                scrollwin.expand = true;
 
496
                box.add(scrollwin);
 
497
 
 
498
                return treeview;
 
499
        }
 
500
 
 
501
        // add_column_text
 
502
        private Gtk.TreeViewColumn add_column_text(
 
503
                Gtk.TreeView treeview, string title, out Gtk.CellRendererText cell){
 
504
                        
 
505
                // TreeViewColumn
 
506
                var col = new Gtk.TreeViewColumn();
 
507
                col.title = title;
 
508
                
 
509
                cell = new Gtk.CellRendererText();
 
510
                cell.xalign = (float) 0.0;
 
511
                col.pack_start (cell, false);
 
512
                treeview.append_column(col);
 
513
                
 
514
                return col;
 
515
        }
 
516
 
 
517
        // add_column_icon
 
518
        private Gtk.TreeViewColumn add_column_icon(
 
519
                Gtk.TreeView treeview, string title, out Gtk.CellRendererPixbuf cell){
 
520
                
 
521
                // TreeViewColumn
 
522
                var col = new Gtk.TreeViewColumn();
 
523
                col.title = title;
 
524
                
 
525
                cell = new Gtk.CellRendererPixbuf();
 
526
                cell.xpad = 2;
 
527
                col.pack_start (cell, false);
 
528
                treeview.append_column(col);
 
529
 
 
530
                return col;
 
531
        }
 
532
 
 
533
        // add_column_icon_and_text
 
534
        private Gtk.TreeViewColumn add_column_icon_and_text(
 
535
                Gtk.TreeView treeview, string title,
 
536
                out Gtk.CellRendererPixbuf cell_pix, out Gtk.CellRendererText cell_text){
 
537
                        
 
538
                // TreeViewColumn
 
539
                var col = new Gtk.TreeViewColumn();
 
540
                col.title = title;
 
541
 
 
542
                cell_pix = new Gtk.CellRendererPixbuf();
 
543
                cell_pix.xpad = 2;
 
544
                col.pack_start (cell_pix, false);
 
545
                
 
546
                cell_text = new Gtk.CellRendererText();
 
547
                cell_text.xalign = (float) 0.0;
 
548
                col.pack_start (cell_text, false);
 
549
                treeview.append_column(col);
 
550
 
 
551
                return col;
 
552
        }
 
553
 
 
554
        // add_column_radio_and_text
 
555
        private Gtk.TreeViewColumn add_column_radio_and_text(
 
556
                Gtk.TreeView treeview, string title,
 
557
                out Gtk.CellRendererToggle cell_radio, out Gtk.CellRendererText cell_text){
 
558
                        
 
559
                // TreeViewColumn
 
560
                var col = new Gtk.TreeViewColumn();
 
561
                col.title = title;
 
562
 
 
563
                cell_radio = new Gtk.CellRendererToggle();
 
564
                cell_radio.xpad = 2;
 
565
                cell_radio.radio = true;
 
566
                cell_radio.activatable = true;
 
567
                col.pack_start (cell_radio, false);
 
568
                
 
569
                cell_text = new Gtk.CellRendererText();
 
570
                cell_text.xalign = (float) 0.0;
 
571
                col.pack_start (cell_text, false);
 
572
                treeview.append_column(col);
 
573
 
 
574
                return col;
 
575
        }
 
576
 
 
577
        // add_column_icon_radio_text
 
578
        private Gtk.TreeViewColumn add_column_icon_radio_text(
 
579
                Gtk.TreeView treeview, string title,
 
580
                out Gtk.CellRendererPixbuf cell_pix,
 
581
                out Gtk.CellRendererToggle cell_radio,
 
582
                out Gtk.CellRendererText cell_text){
 
583
                        
 
584
                // TreeViewColumn
 
585
                var col = new Gtk.TreeViewColumn();
 
586
                col.title = title;
 
587
 
 
588
                cell_pix = new Gtk.CellRendererPixbuf();
 
589
                cell_pix.xpad = 2;
 
590
                col.pack_start (cell_pix, false);
 
591
 
 
592
                cell_radio = new Gtk.CellRendererToggle();
 
593
                cell_radio.xpad = 2;
 
594
                cell_radio.radio = true;
 
595
                cell_radio.activatable = true;
 
596
                col.pack_start (cell_radio, false);
 
597
                
 
598
                cell_text = new Gtk.CellRendererText();
 
599
                cell_text.xalign = (float) 0.0;
 
600
                col.pack_start (cell_text, false);
 
601
                treeview.append_column(col);
 
602
 
 
603
                return col;
 
604
        }
 
605
 
 
606
        // add_label_scrolled
 
607
        private Gtk.Label add_label_scrolled(
 
608
                Gtk.Box box, string text,
 
609
                bool show_border = false, bool wrap = false, int ellipsize_chars = 40){
 
610
 
 
611
                // ScrolledWindow
 
612
                var scroll = new Gtk.ScrolledWindow(null, null);
 
613
                scroll.hscrollbar_policy = PolicyType.NEVER;
 
614
                scroll.vscrollbar_policy = PolicyType.ALWAYS;
 
615
                scroll.expand = true;
 
616
                box.add(scroll);
 
617
                
 
618
                var label = new Gtk.Label(text);
 
619
                label.xalign = (float) 0.0;
 
620
                label.yalign = (float) 0.0;
 
621
                label.margin = 6;
 
622
                scroll.add(label);
 
623
 
 
624
                if (wrap){
 
625
                        label.wrap = true;
 
626
                        label.wrap_mode = Pango.WrapMode.WORD;
 
627
                }
 
628
 
 
629
                if (ellipsize_chars > 0){
 
630
                        label.wrap = false;
 
631
                        label.ellipsize = Pango.EllipsizeMode.MIDDLE;
 
632
                        label.max_width_chars = ellipsize_chars;
 
633
                }
 
634
 
 
635
                if (show_border){
 
636
                        scroll.set_shadow_type (ShadowType.ETCHED_IN);
 
637
                }
 
638
                else{
 
639
                        label.margin_left = 0;
 
640
                }
 
641
                
 
642
                return label;
 
643
        }
 
644
 
 
645
        // add_text_view
 
646
        private Gtk.TextView add_text_view(
 
647
                Gtk.Box box, string text){
 
648
 
 
649
                // ScrolledWindow
 
650
                var scrolled = new Gtk.ScrolledWindow(null, null);
 
651
                scrolled.hscrollbar_policy = PolicyType.NEVER;
 
652
                scrolled.vscrollbar_policy = PolicyType.ALWAYS;
 
653
                scrolled.expand = true;
 
654
                box.add(scrolled);
 
655
                
 
656
                var view = new Gtk.TextView();
 
657
                view.wrap_mode = Gtk.WrapMode.WORD_CHAR;
 
658
                view.accepts_tab = false;
 
659
                view.editable = false;
 
660
                view.cursor_visible = false;
 
661
                view.buffer.text = text;
 
662
                view.sensitive = false;
 
663
                scrolled.add (view);
 
664
 
 
665
                return view;
 
666
        }
 
667
                
 
668
        // add_label
 
669
        private Gtk.Label add_label(
 
670
                Gtk.Box box, string text, bool is_bold = false,
 
671
                bool is_italic = false, bool is_large = false){
 
672
                        
 
673
                string msg = "<span%s%s%s>%s</span>".printf(
 
674
                        (is_bold ? " weight=\"bold\"" : ""),
 
675
                        (is_italic ? " style=\"italic\"" : ""),
 
676
                        (is_large ? " size=\"x-large\"" : ""),
 
677
                        text);
 
678
                        
 
679
                var label = new Gtk.Label(msg);
 
680
                label.set_use_markup(true);
 
681
                label.xalign = (float) 0.0;
 
682
                box.add(label);
 
683
                return label;
 
684
        }
 
685
 
 
686
        // add_label_header
 
687
        private Gtk.Label add_label_header(
 
688
                Gtk.Box box, string text, bool large_heading = false){
 
689
                
 
690
                var label = add_label(box, escape_html(text), true, false, large_heading);
 
691
                label.margin_bottom = 12;
 
692
                return label;
 
693
        }
 
694
 
 
695
        // add_label_subnote
 
696
        private Gtk.Label add_label_subnote(
 
697
                Gtk.Box box, string text){
 
698
                
 
699
                var label = add_label(box, text, false, true);
 
700
                label.margin_left = 6;
 
701
                return label;
 
702
        }
 
703
 
 
704
        // add_radio
 
705
        private Gtk.RadioButton add_radio(
 
706
                Gtk.Box box, string text, Gtk.RadioButton? another_radio_in_group){
 
707
 
 
708
                Gtk.RadioButton radio = null;
 
709
 
 
710
                if (another_radio_in_group == null){
 
711
                        radio = new Gtk.RadioButton(null);
 
712
                }
 
713
                else{
 
714
                        radio = new Gtk.RadioButton.from_widget(another_radio_in_group);
 
715
                }
 
716
 
 
717
                radio.label = text;
 
718
                
 
719
                box.add(radio);
 
720
 
 
721
                foreach(var child in radio.get_children()){
 
722
                        if (child is Gtk.Label){
 
723
                                var label = (Gtk.Label) child;
 
724
                                label.use_markup = true;
 
725
                                break;
 
726
                        }
 
727
                }
 
728
                
 
729
                return radio;
 
730
        }
 
731
 
 
732
        // add_checkbox
 
733
        private Gtk.CheckButton add_checkbox(
 
734
                Gtk.Box box, string text){
 
735
 
 
736
                var chk = new Gtk.CheckButton.with_label(text);
 
737
                chk.label = text;
 
738
                box.add(chk);
 
739
 
 
740
                foreach(var child in chk.get_children()){
 
741
                        if (child is Gtk.Label){
 
742
                                var label = (Gtk.Label) child;
 
743
                                label.use_markup = true;
 
744
                                break;
 
745
                        }
 
746
                }
 
747
                
 
748
                /*
 
749
                chk.toggled.connect(()=>{
 
750
                        chk.active;
 
751
                });
 
752
                */
 
753
 
 
754
                return chk;
 
755
        }
 
756
 
 
757
        // add_spin
 
758
        private Gtk.SpinButton add_spin(
 
759
                Gtk.Box box, double min, double max, double val,
 
760
                int digits = 0, double step = 1, double step_page = 1){
 
761
 
 
762
                var adj = new Gtk.Adjustment(val, min, max, step, step_page, 0);
 
763
                var spin  = new Gtk.SpinButton(adj, step, digits);
 
764
                spin.xalign = (float) 0.5;
 
765
                box.add(spin);
 
766
 
 
767
                /*
 
768
                spin.value_changed.connect(()=>{
 
769
                        label.sensitive = spin.sensitive;
 
770
                });
 
771
                */
 
772
 
 
773
                return spin;
 
774
        }
 
775
 
 
776
        // add_button
 
777
        private Gtk.Button add_button(
 
778
                Gtk.Box box, string text, string tooltip,
 
779
                ref Gtk.SizeGroup? size_group,
 
780
                Gtk.Image? icon = null){
 
781
                        
 
782
                var button = new Gtk.Button();
 
783
        box.add(button);
 
784
 
 
785
        button.set_label(text);
 
786
        button.set_tooltip_text(tooltip);
 
787
 
 
788
        if (icon != null){
 
789
                        button.set_image(icon);
 
790
                        button.set_always_show_image(true);
 
791
                }
 
792
 
 
793
                if (size_group == null){
 
794
                        size_group = new Gtk.SizeGroup(SizeGroupMode.HORIZONTAL);
 
795
                }
 
796
                
 
797
                size_group.add_widget(button);
 
798
                
 
799
        return button;
 
800
        }
 
801
 
 
802
        // add_toggle_button
 
803
        private Gtk.ToggleButton add_toggle_button(
 
804
                Gtk.Box box, string text, string tooltip,
 
805
                ref Gtk.SizeGroup? size_group,
 
806
                Gtk.Image? icon = null){
 
807
                        
 
808
                var button = new Gtk.ToggleButton();
 
809
        box.add(button);
 
810
 
 
811
        button.set_label(text);
 
812
        button.set_tooltip_text(tooltip);
 
813
 
 
814
        if (icon != null){
 
815
                        button.set_image(icon);
 
816
                        button.set_always_show_image(true);
 
817
                }
 
818
 
 
819
                if (size_group == null){
 
820
                        size_group = new Gtk.SizeGroup(SizeGroupMode.HORIZONTAL);
 
821
                }
 
822
                
 
823
                size_group.add_widget(button);
 
824
                
 
825
        return button;
 
826
        }
 
827
        
 
828
        // add_directory_chooser
 
829
        private Gtk.Entry add_directory_chooser(
 
830
                Gtk.Box box, string selected_directory, Gtk.Window parent_window){
 
831
                        
 
832
                // Entry
 
833
                var entry = new Gtk.Entry();
 
834
                entry.hexpand = true;
 
835
                //entry.margin_left = 6;
 
836
                entry.secondary_icon_stock = "gtk-open";
 
837
                entry.placeholder_text = _("Enter path or browse for directory");
 
838
                box.add (entry);
 
839
 
 
840
                if ((selected_directory != null) && dir_exists(selected_directory)){
 
841
                        entry.text = selected_directory;
 
842
                }
 
843
 
 
844
                entry.icon_release.connect((p0, p1) => {
 
845
                        //chooser
 
846
                        var chooser = new Gtk.FileChooserDialog(
 
847
                            _("Select Path"),
 
848
                            parent_window,
 
849
                            FileChooserAction.SELECT_FOLDER,
 
850
                            "_Cancel",
 
851
                            Gtk.ResponseType.CANCEL,
 
852
                            "_Open",
 
853
                            Gtk.ResponseType.ACCEPT
 
854
                        );
 
855
 
 
856
                        chooser.select_multiple = false;
 
857
                        chooser.set_filename(selected_directory);
 
858
 
 
859
                        if (chooser.run() == Gtk.ResponseType.ACCEPT) {
 
860
                                entry.text = chooser.get_filename();
 
861
 
 
862
                                //App.repo = new SnapshotRepo.from_path(entry.text, this);
 
863
                                //check_backup_location();
 
864
                        }
 
865
 
 
866
                        chooser.destroy();
 
867
                });
 
868
 
 
869
                return entry;
 
870
        }
 
871
 
 
872
 
447
873
}
448
874