200 lines
4.3 KiB
PHP
200 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* OpenSQLManager
|
|
*
|
|
* Free Database manager for Open Source Databases
|
|
*
|
|
* @package OpenSQLManager
|
|
* @author Timothy J. Warren
|
|
* @copyright Copyright (c) 2012
|
|
* @link https://github.com/aviat4ion/OpenSQLManager
|
|
* @license http://philsturgeon.co.uk/code/dbad-license
|
|
*/
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Main Window Class
|
|
*
|
|
* Creates and displays the main interface window
|
|
*
|
|
* @package OpenSQLManager
|
|
* @subpackage Windows
|
|
*/
|
|
class Main extends GtkWindow {
|
|
|
|
/**
|
|
* Reference to settings instance
|
|
*
|
|
* @var Settings
|
|
*/
|
|
private $settings;
|
|
|
|
/**
|
|
* Reference to connection sidebar instance
|
|
*
|
|
* @var Connection_Sidebar
|
|
*/
|
|
private $connection_sidebar;
|
|
|
|
/**
|
|
* Create and display the main window on startup
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
$this->settings =& Settings::get_instance();
|
|
|
|
|
|
if ( ! is_null($this->settings->width) && ! is_null($this->settings->height))
|
|
{
|
|
// Resize to the last size
|
|
$this->set_size_request($this->settings->width, $this->settings->height);
|
|
}
|
|
else
|
|
{
|
|
// Resize to a sane size
|
|
$this->set_size_request(640, 480);
|
|
}
|
|
|
|
if (! is_null($this->settings->position))
|
|
{
|
|
$this->move($this->settings->position[0], $this->settings->position[1]);
|
|
}
|
|
else
|
|
{
|
|
$this->set_position(Gtk::WIN_POS_CENTER);
|
|
}
|
|
|
|
// Layout the interface
|
|
$this->_main_layout();
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Some cleanup for when the main window is closed
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __destruct()
|
|
{
|
|
// Save the Window position
|
|
$this->settings->position = $this->get_position();
|
|
|
|
list($width, $height) = $this->get_size();
|
|
|
|
// Save the Window hegiht
|
|
$this->settings->height = $height;
|
|
|
|
// Save the Window width
|
|
$this->settings->width = $width;
|
|
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Exits the GTK loop
|
|
*
|
|
* @return void
|
|
*/
|
|
public function quit()
|
|
{
|
|
Gtk::main_quit();
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Layout the main interface
|
|
* Create menus, hboxes, vboxs and other widgets
|
|
*
|
|
* @return void
|
|
*/
|
|
private function _main_layout()
|
|
{
|
|
$this->set_title(PROGRAM_NAME);
|
|
|
|
// Quit when this window is closed
|
|
$this->connect_simple('destroy', array('gtk', 'main_quit'));
|
|
|
|
// Main Vbox that everything is contained in
|
|
$main_vbox = new GTKVBox(FALSE, 5);
|
|
|
|
// Main Hpaned for columns
|
|
$hpane = new GTKHPaned();
|
|
|
|
// Add the menubar
|
|
$main_vbox->pack_start($this->_create_menu(), FALSE, FALSE);
|
|
|
|
// Add the main interface area hbox
|
|
$main_vbox->pack_start($hpane);
|
|
|
|
$scrolled_win = new GtkScrolledWindow();
|
|
$scrolled_win->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
|
|
$scrolled_win->add_with_viewport(DB_tabs::get_instance());
|
|
|
|
// Add the connection sidebar
|
|
$this->connection_sidebar =& Connection_Sidebar::get_instance();
|
|
|
|
// Add the left column to the hpane
|
|
$hpane->pack1($this->connection_sidebar, FALSE);
|
|
$hpane->pack2($scrolled_win);
|
|
|
|
// Add the Vbox, and show the window
|
|
$this->add($main_vbox);
|
|
$this->show_all();
|
|
}
|
|
|
|
// --------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Create the menu for the program
|
|
*
|
|
* @return GtkMenuBar
|
|
*/
|
|
private function _create_menu()
|
|
{
|
|
// Menu Bar
|
|
$menu_bar = new GtkMenuBar();
|
|
|
|
// Menu Bar Top Items
|
|
$top_file_menu = new GtkMenuItem('_File');
|
|
$top_help_menu = new GtkMenuItem('_Help');
|
|
|
|
// Add sub Menus to top items
|
|
$file_menu = new GtkMenu();
|
|
$top_file_menu->set_submenu($file_menu);
|
|
$help_menu = new GtkMenu();
|
|
$top_help_menu->set_submenu($help_menu);
|
|
|
|
|
|
// File Menu
|
|
{
|
|
// Set up the quit item
|
|
$quit = new GtkImageMenuItem(GTK::STOCK_QUIT);
|
|
$quit->connect_simple('activate', array($this, 'quit'));
|
|
$file_menu->append($quit);
|
|
|
|
// Add the top level menu to the menubar
|
|
$menu_bar->append($top_file_menu);
|
|
}
|
|
|
|
// Help Menu
|
|
{
|
|
// Set up the about item
|
|
$about = new GtkImageMenuItem(GTK::STOCK_ABOUT);
|
|
$about->connect_simple('activate', 'about');
|
|
$help_menu->append($about);
|
|
|
|
// Add the top level menu to the menubar
|
|
$menu_bar->append($top_help_menu);
|
|
}
|
|
|
|
|
|
return $menu_bar;
|
|
}
|
|
}
|
|
// End of main.php
|