gui: Begin implementing the gui

This adds the ocarina6.glade file and code for clicking the library
import button.

Signed-off-by: Anna Schumaker <schumaker.anna@gmail.com>
This commit is contained in:
Anna Schumaker 2014-01-05 22:10:02 -05:00 committed by Anna Schumaker
parent bb7c3b334a
commit becf7f94bc
8 changed files with 412 additions and 337 deletions

1
.gitignore vendored
View File

@ -5,4 +5,5 @@
*.test
*.glade~
gui/#*
gui/ocarina
.sconsign.dblite

13
config
View File

@ -4,6 +4,7 @@ import os
# Configuration variables
CONFIG_VERSION = 6.0
CONFIG_DEBUG = True
CONFIG_TESTING = False
# Set up default environment
@ -31,7 +32,9 @@ class Config:
def reconfigure(self):
env.Replace( CCFLAGS = self.ENV )
if self.TEST: env.Append( CCFLAGS = [ "-DCONFIG_TEST" ])
if self.TEST == True:
print "Testing enabled"
env.Append( CCFLAGS = [ "-DCONFIG_TEST" ])
def reset(self, TEST = False):
self.AUDIO = False
@ -53,4 +56,10 @@ Export("env", "CONFIG")
# Import SConscript files
include = SConscript("include/Sconscript")
design = SConscript("design/Sconscript")
tests = SConscript("tests/Sconscript")
gui = SConscript("gui/Sconscript")
Default("gui")
if CONFIG_TESTING == True:
tests = SConscript("tests/Sconscript")
Depends(gui, tests)

9
gui/Sconscript Normal file
View File

@ -0,0 +1,9 @@
#!/usr/bin/python
Import("env", "CONFIG")
CONFIG.package("gtkmm-3.0")
CONFIG.AUDIO = True
lib = SConscript("../lib/Sconscript");
env.Program("ocarina", Glob("*.cpp") + SConscript("../lib/Sconscript"))

15
gui/main.cpp Normal file
View File

@ -0,0 +1,15 @@
/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <ocarina.h>
int main(int argc, char **argv)
{
Gtk::Window *window;
Gtk::Main ocarina(argc, argv);
window = connect_wires();
Gtk::Main::run(*window);
return 0;
}

View File

@ -12,43 +12,17 @@
<mime-type>inode/directory</mime-type>
</mime-types>
</object>
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-refresh</property>
</object>
<object class="GtkImage" id="image9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-convert</property>
</object>
<object class="GtkListStore" id="o_directories">
<object class="GtkListStore" id="o_collection_dirs">
<columns>
<!-- column-name Path -->
<!-- column-name id -->
<column type="guint"/>
<!-- column-name enabled -->
<column type="gboolean"/>
<!-- column-name path -->
<column type="gchararray"/>
<!-- column-name Files -->
<!-- column-name size -->
<column type="guint"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">/home/anna/Music</col>
<col id="1">42</col>
</row>
</data>
</object>
<object class="GtkListStore" id="o_playlists">
<columns>
<!-- column-name gchararray1 -->
<column type="gchararray"/>
</columns>
<data>
<row>
<col id="0" translatable="yes">Favorite</col>
</row>
<row>
<col id="0" translatable="yes">Banned</col>
</row>
</data>
</object>
<object class="GtkAdjustment" id="o_progress">
<property name="upper">100</property>
@ -71,185 +45,18 @@
<object class="GtkNotebook" id="notebook1">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="tab_pos">left</property>
<child>
<object class="GtkNotebook" id="notebook2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tab_pos">left</property>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Library tracks here :)</property>
</object>
</child>
<child type="tab">
<object class="GtkBox" id="box10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Library</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="o_library_size">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">List of recent songs here!</property>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkBox" id="box11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Recent</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="o_recent_size">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">0</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label" translatable="yes">Play Queue</property>
<property name="justify">center</property>
<property name="angle">90</property>
</object>
<packing>
<property name="tab_expand">True</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTreeView" id="treeview2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">o_playlists</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection2"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
<property name="fixed_width">150</property>
<property name="title" translatable="yes">Playlist</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext3"/>
<attributes>
<attribute name="markup">0</attribute>
</attributes>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label" translatable="yes">Playlists</property>
<property name="angle">90</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab_expand">True</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<object class="GtkBox" id="box7">
<object class="GtkBox" id="box8">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkFileChooserWidget" id="o_dir_chooser">
<object class="GtkFileChooserWidget" id="o_collection_chooser">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="action">select-folder</property>
<property name="create_folders">False</property>
<property name="filter">filefilter1</property>
</object>
<packing>
@ -259,13 +66,59 @@
</packing>
</child>
<child>
<object class="GtkBox" id="box1">
<object class="GtkBox" id="box9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label8">
<object class="GtkScrolledWindow" id="scrolledwindow1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkTreeView" id="o_collection_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">o_collection_dirs</property>
<property name="rules_hint">True</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="fixed_width">20</property>
<child>
<object class="GtkCellRendererToggle" id="cellrenderertoggle1"/>
<attributes>
<attribute name="activatable">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
<property name="fixed_width">50</property>
<property name="title" translatable="yes">Size</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">3</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn3">
<property name="title" translatable="yes">Path</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext2"/>
<attributes>
<attribute name="text">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
@ -274,12 +127,143 @@
</packing>
</child>
<child>
<object class="GtkButton" id="button3">
<property name="label" translatable="yes">Import</property>
<object class="GtkBox" id="box10">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image9</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkButton" id="o_collection_ok">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<object class="GtkBox" id="box11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkImage" id="image9">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-ok</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">OK</property>
<property name="justify">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="o_collection_update">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<object class="GtkBox" id="box13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkImage" id="image10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-refresh</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Update</property>
<property name="justify">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="o_collection_import">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<object class="GtkBox" id="box14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkImage" id="image11">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock">gtk-convert</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Import</property>
<property name="justify">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -287,35 +271,6 @@
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button1">
<property name="label">gtk-ok</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button2">
<property name="label" translatable="yes">Update All</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="image">image8</property>
<property name="yalign">0.46000000834465027</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
@ -323,61 +278,42 @@
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkBox" id="box1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkTreeView" id="treeview1">
<object class="GtkImage" id="image8">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">o_directories</property>
<child internal-child="selection">
<object class="GtkTreeSelection" id="treeview-selection1"/>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn1">
<property name="title" translatable="yes">Path</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext1"/>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="treeviewcolumn2">
<property name="max_width">1</property>
<property name="title" translatable="yes">Files</property>
<child>
<object class="GtkCellRendererText" id="cellrenderertext2"/>
<attributes>
<attribute name="text">1</attribute>
</attributes>
</child>
</object>
</child>
<property name="can_focus">False</property>
<property name="stock">gtk-harddisk</property>
<property name="icon_size">1</property>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Collection
Manager</property>
<property name="justify">right</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel" id="label3">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="label" translatable="yes">Directories</property>
<property name="angle">90</property>
</object>
<packing>
<property name="position">2</property>
<property name="tab_expand">True</property>
<property name="tab_fill">False</property>
</packing>
</child>
@ -398,6 +334,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="homogeneous">True</property>
<child>
<object class="GtkBox" id="box5">
<property name="visible">True</property>
@ -663,54 +600,63 @@
</packing>
</child>
<child>
<object class="GtkBox" id="box8">
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="vexpand">False</property>
<property name="orientation">vertical</property>
<property name="can_focus">True</property>
<child>
<object class="GtkLabel" id="o_title">
<object class="GtkViewport" id="viewport2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size='xx-large'&gt;A Random Song Title&lt;/span&gt;</property>
<property name="use_markup">True</property>
<child>
<object class="GtkBox" id="box7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel" id="o_title">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size='xx-large'&gt;A Random Song Title&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="o_artist">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size='x-large'&gt;By: Some Artist&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="o_album">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size='x-large'&gt;From: Some Album&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="o_artist">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size='x-large'&gt;By: Some Artist&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="o_album">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">&lt;span size='x-large'&gt;From: Some Album&lt;/span&gt;</property>
<property name="use_markup">True</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
@ -724,7 +670,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<child>
@ -735,7 +681,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="position">3</property>
</packing>
</child>
<child>
@ -743,7 +689,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkProgressBar" id="progressbar1">
<object class="GtkProgressBar" id="o_idle_progress">
<property name="can_focus">False</property>
</object>
<packing>
@ -780,7 +726,7 @@
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">3</property>
<property name="position">4</property>
</packing>
</child>
</object>

85
gui/wires.cpp Normal file
View File

@ -0,0 +1,85 @@
/*
* Copyright 2014 (c) Anna Schumaker.
*/
#include <idle.h>
#include <library.h>
#include <ocarina.h>
#include <print.h>
static Glib::RefPtr<Gtk::Builder> builder;
void enable_idle();
/*
* Collection manager functions
*/
static void on_collection_ok()
{
print("OK clicked!\n");
}
static void on_collection_update()
{
print("Update clicked!\n");
//library :: update_all();
enable_idle();
}
static void on_collection_import()
{
print("Import clicked!\n");
library :: import();
enable_idle();
}
/*
* Idle func
*/
bool on_idle()
{
Gtk::ProgressBar *prog;
bool ret = idle::run_task();
builder->get_widget("o_idle_progress", prog);
if (ret == false)
prog->hide();
else {
prog->show();
prog->set_fraction(idle::get_progress());
}
return ret;
}
void enable_idle()
{
Glib::signal_idle().connect(sigc::ptr_fun(on_idle));
}
/*
* Ocarina functions
*/
static void connect_button(Glib::RefPtr<Gtk::Builder> &builder,
const std::string &name, void (*func)())
{
Gtk::Button *button;
builder->get_widget(name, button);
button->signal_clicked().connect(sigc::ptr_fun(func));
}
Gtk::Window *connect_wires()
{
Gtk::Window *window;
builder = Gtk::Builder::create();
builder->add_from_file("gui/ocarina6.glade");
builder->get_widget("o_window", window);
/* Collection manager */
connect_button(builder, "o_collection_ok", on_collection_ok);
connect_button(builder, "o_collection_update", on_collection_update);
connect_button(builder, "o_collection_import", on_collection_import);
return window;
}

12
include/ocarina.h Normal file
View File

@ -0,0 +1,12 @@
/*
* Copyright 2014 (c) Anna Schumaker.
*/
#ifndef OCARINA_H
#define OCARINA_H
#include <gtkmm.h>
/* wires.cpp */
Gtk::Window *connect_wires();
#endif /* OCARINA_H */

View File

@ -62,5 +62,3 @@ scripts = [ "print", "file", "database", "index", "filter", "idle", "playlist",
for s in scripts:
CONFIG.reset(TEST = True)
SConscript("%s/Sconscript" % s)
Default("tests")