View difference between Paste ID: NfdGyJcd and UtMJ3Enx
SHOW: | | - or go back to the newest paste.
1
/*  Title: Elementary Sequal
2
 *  
3
 *
4
 *  Based Upon the code-example by Tom Beckmann:            https://plus.google.com/111734729718206650167/posts/jGGQrQrqxdg
5
 *  Toms' Code is Based upon the design by Harvey Cabaguio: https://plus.google.com/110079731285191638950/posts/F8LZJuHxojD
6
 *
7
 */
8
9
10
11
using Gtk;
12
using Granite;
13
14
namespace eSQL {
15
16
    class MainWindow : Gtk.Window {
17
18
        /* APPLICATION INFORMATION */
19
        const string program_name = "";
20
        const string exec_name = "";
21
22
        const string app_years = "";
23
        const string app_version = "";
24
        const string application_id = "";
25
        const string app_icon = "";
26
        const string app_launcher = ".desktop";
27
        const string app_website = "";
28
        const string app_website_lbl = "";
29
        
30
        const string[] app_authors = {""};
31
        const string[] app_documenters = {""};
32
        const string[] app_translators = {"Chris Timberlake <game64@gmail.com>"};
33
        const string[] app_artists = {""};
34
35
        const string app_license_name = "Unknown License";
36-
        const Gtk.License app_license = License.Unknown;
36+
        const Gtk.License app_license = License.MIT_X11;
37
        
38
        const string app_comments = "";
39
40
    
41
        //Define variables.
42
        Gtk.Box         			main_container;
43
        Gtk.Toolbar     			main_toolbar;   
44
        Gtk.ToolItem    			main_title;
45
46
47
        const int icon_size    = Gtk.IconSize.LARGE_TOOLBAR; 
48
        const int icon_height  = 48;
49
50
        const string main_toolbar_css      = """
51
                                    .title {
52
                                            color: #666;
53
                                            text-shadow: 0px 1px 0px white;
54
                                    }
55
                                    .toolbar {
56
                                            padding: 0px;
57
                                            box-shadow: inset 0px 1px 0px rgba(255,255,255,0.3);
58
                                    }
59
                                  """;
60
        Gtk.CssProvider css; 
61
62
        /* CUSTOM WIDGETS */
63
        
64
        // It's just good coding practice in any language to define everything before it's used.
65
        // Even if that specific language doesn't care.
66
        public Gtk.ToolItem toolbar_seperator() {
67
    
68
            //Create the Seperator Referance
69
            var sep = new Gtk.ToolItem ();
70
            //Set Height/Width
71
            sep.height_request = icon_height;
72
            sep.width_request = 1;
73
            
74
            //Design the look!
75
            sep.draw.connect ((cr) => {
76
                   cr.move_to (0, 0);
77
                   cr.line_to (0, 60);
78
                   cr.set_line_width (1);
79
                   var grad = new Cairo.Pattern.linear (0, 0, 0, icon_height);
80
                   grad.add_color_stop_rgba (0, 0.3, 0.3, 0.3, 0.4);
81
                   grad.add_color_stop_rgba (0.8, 0, 0, 0, 0);
82
                   cr.set_source (grad);
83
                   cr.stroke ();
84
                   return true;
85
            });
86
            //Add CSS Class Contexts
87
            sep.get_style_context ().add_class ("sep");
88
            sep.get_style_context ().add_provider (css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
89
 
90
            return sep;
91
        }        
92
93
        //Main window's title
94
        Gtk.Label mw_title;
95
        public new string title {
96
            get {
97
                return mw_title.label;
98
            }
99
            set {
100
                mw_title.label = value;
101
            }
102
        }
103
104
        public MainWindow(){
105
            
106
            /* CREATE THE BASE! */            
107
            
108
            //Build Main Toolbar
109
            main_toolbar = new Gtk.Toolbar();
110
            //Setup the Toolbar's Look
111
            main_toolbar.icon_size = icon_size;
112
            //The CSS
113
            main_toolbar.get_style_context().add_class ("primary-toolbar");
114
            main_toolbar.get_style_context().add_provider (css, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION);
115
116
            //Build the Box Container!
117
            main_container = new Gtk.Box(Gtk.Orientation.VERTICAL, 0);
118
            main_container.pack_start (main_toolbar, false);
119
            //main_container.window-state-event.connect (() => { this.toggle_maximize();  });
120
121
            /* TOOLBAR ITEMS! */
122
            // Close Button
123
            var tb_close = new Gtk.ToolButton (new Gtk.Image.from_file("/usr/share/themes/elementary/metacity-1/close.svg"), "Close");
124
            // Clicked Action
125
            tb_close.clicked.connect (() => destroy ());
126
            // Set the proper dimension so it doesn't look ugly!
127
            tb_close.height_request = icon_height;
128
            tb_close.width_request  = icon_height;
129
130
            // Maximize Button
131
            var tb_maximize = new Gtk.ToolButton (new Gtk.Image.from_file("/usr/share/themes/elementary/metacity-1/maximize.svg"), "Close");
132
            // Clicked Action => TOGGLE MAXIMIZE!
133
            tb_maximize.clicked.connect (() => { this.toggle_maximize();  });
134
            // Set the proper dimension so it doesn't look ugly!
135
            tb_maximize.height_request = icon_height;
136
            tb_maximize.width_request  = icon_height;
137
            
138
            // Prepare the Main Window Title.
139
            mw_title = new Gtk.Label("Elementary Studio (Sequal)");
140
            // Make it look right.
141
            mw_title.override_font(Pango.FontDescription.from_string("bold"));
142
            //  Create the ToolBar Item
143
            main_title = new Gtk.ToolItem();
144
            // Add the Main Window Title.
145
            main_title.add(mw_title);
146
            // Expand it!
147
            main_title.set_expand(true);
148
149
            // Settings Menu!
150
            var settings_menu = new Gtk.Menu();
151
            //Make a spot for an about dlg
152
            Gtk.MenuItem item_about = new Gtk.MenuItem.with_label ("About");
153
            Gtk.MenuItem item_tf = new Gtk.MenuItem.with_label ("tf");
154
            item_about.activate.connect (() => {
155
156
                            Granite.Widgets.show_about_dialog (base, 
157
                                               "program_name", program_name,
158
                                            //   "version", build_version,
159
                                               "logo_icon_name", app_icon,
160
161
                                               "comments", app_comments,
162
                                               "copyright", "%s %s Developers".printf (app_years, program_name),
163
                                               "website", app_website,
164
                                               "website_label", "Website",
165
166
                                               "authors", app_authors,
167
                                               "documenters", app_documenters,
168
                                               "artists", app_artists,
169
                                               "translator_credits", app_translators,
170
                                               "license", app_license_name,
171
                                               "license_type", app_license,
172
173
                                               "help", app_website,
174
                                               "translate", app_website,
175
                                               "bug", app_website);
176
            });
177
178
179
            // Compile the menu!
180
            settings_menu.add(item_about);
181
            settings_menu.add(item_tf);
182
183
            // Settings Button!
184
            //new Granite.Widgets.ToolButtonWithMenu (new Gtk.Image.from_icon_name ("application-menu", Gtk.IconSize.LARGE_TOOLBAR), "", new Gtk.Menu ()), true
185
            var tb_menu = new Granite.Widgets.ToolButtonWithMenu(new Gtk.Image.from_icon_name ("application-menu", Gtk.IconSize.LARGE_TOOLBAR), "", settings_menu);
186
187
            // Insert the toolbar items in order!
188
            main_toolbar.insert (tb_close, -1);
189
            main_toolbar.insert (toolbar_seperator (), -1);
190
            main_toolbar.insert (main_title, -1);
191
            main_toolbar.insert (toolbar_seperator (), -1);
192
            main_toolbar.insert (tb_menu, -1);
193
            main_toolbar.insert (toolbar_seperator (), -1);
194
            main_toolbar.insert (tb_maximize, -1);
195
            
196
            
197
            /*CONTENT */
198
199
	    //main_container.pack_start(/*CONTENT WIDGET HERE*/, true, true, 0);
200
	    
201
	    
202
	    
203
            //Add the Container to the Base GTK
204
            base.add(main_container);
205
            //set the default size
206
            base.set_default_size(800, 600);
207
            //Push it to the center!
208
            base.window_position = WindowPosition.CENTER;
209
        }
210
        
211
        // This is to check and see if it's maximized. If so, Minimize.
212
        void toggle_maximize(){
213
            get_window ().maximize ();
214
        }
215
216
        // We need to hijack the show function of the GTK Window.
217
        public override void show(){
218
            //Show the GTK Window
219
            base.show();
220
            //Change the window style. Border-Only.
221
            get_window ().set_decorations (Gdk.WMDecoration.BORDER);
222
        }
223
224
225
        public override void add (Gtk.Widget widget){
226
            main_container.pack_start(widget, true, true, 0);
227
            main_container.show_all();
228
        }
229
        
230
231
        public override void remove (Gtk.Widget widget){
232
            main_container.remove(widget);
233
        }
234
    }
235
}
236
237
238
//Main Loop!
239
public static int main (string[] args){
240
241
    //Init GTK!
242
    Gtk.init(ref args);
243
244
    //Assign window
245
    var main_window = new eSQL.MainWindow();
246
    // When our app is closed, Cancel the process.
247
    main_window.destroy.connect (Gtk.main_quit);
248
249
    //Show the main window.
250
    main_window.show_all();
251
252
    //GTK Main Loop.
253
    Gtk.main();
254
    return 0;
255
}