Package net.sf.gimme

Source Code of net.sf.gimme.UserInterface

/*
* UserInterface.java 
*
* Copyright (C) 2008 Gimme
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

package net.sf.gimme;

import net.sf.gimme.event.DownloadSizeChanged;
import net.sf.gimme.event.EventListener;
import net.sf.gimme.event.GUIEventListener;
import net.sf.gimme.event.GUIEventPipe;
import net.sf.gimme.event.Mediator;
import java.io.FileNotFoundException;
import net.sf.gimme.event.DownloadStatusChanged;
import org.gnome.gdk.Event;
import org.gnome.glade.Glade;
import org.gnome.glade.XML;
import org.gnome.gtk.CellRendererText;
import org.gnome.gtk.DataColumn;
import org.gnome.gtk.DataColumnReference;
import org.gnome.gtk.DataColumnString;
import org.gnome.gtk.Gtk;
import org.gnome.gtk.ImageMenuItem;
import org.gnome.gtk.ListStore;
import org.gnome.gtk.SelectionMode;
import org.gnome.gtk.ToolButton;
import org.gnome.gtk.TreeIter;
import org.gnome.gtk.TreePath;
import org.gnome.gtk.TreeView;
import org.gnome.gtk.TreeViewColumn;
import org.gnome.gtk.Widget;
import org.gnome.gtk.Window;

/**
*
* @author aiden
*/
public class UserInterface implements DownloadManager, GUIEventListener, EventListener
{
    final DataColumnReference download = new DataColumnReference();
    final DataColumnString name = new DataColumnString();
    final DataColumnString progress = new DataColumnString();
    final DataColumnString size = new DataColumnString();
    final DataColumnString totalsize = new DataColumnString();
    final DataColumnString speed = new DataColumnString();
    final DataColumnString status = new DataColumnString();
    final DataColumn[] types = new DataColumn[]
    {
        download,
        name,
        progress,
        size,
        totalsize,
        speed,
        status
    };
    final ListStore model = new ListStore(types);
    private Configuration conf;
    public final String GLADE_PATH = "res/gimme.glade";
    private XML mainGlade;

    public UserInterface(Configuration conf)
    {
        this.conf = conf;

        try
        {
            mainGlade = Glade.parse(GLADE_PATH, "wnd_main");

            initTreeView((TreeView)mainGlade.getWidget("treeview"));

            final ToolButton addt = (ToolButton)mainGlade.getWidget("tbtn_add");
            addt.connect((ToolButton.CLICKED)new GUIEventPipe(this, "add"));

            final ImageMenuItem addm = (ImageMenuItem)mainGlade.getWidget("mbtn_add");
            addm.connect(new GUIEventPipe(this, "add"));

            final ToolButton removet = (ToolButton)mainGlade.getWidget("tbtn_remove");
            removet.connect((ToolButton.CLICKED)new GUIEventPipe(this, "remove"));

            final ToolButton pauset = (ToolButton)mainGlade.getWidget("tbtn_pause");
            pauset.connect((ToolButton.CLICKED)new GUIEventPipe(this, "pause"));

            final ToolButton resumet = (ToolButton)mainGlade.getWidget("tbtn_resume");
            resumet.connect((ToolButton.CLICKED)new GUIEventPipe(this, "resume"));
           
            final ImageMenuItem preferencesm = (ImageMenuItem)mainGlade.getWidget("mbtn_preferences");
            preferencesm.connect(new GUIEventPipe(this, "preferences"));

            final Window w = (Window)mainGlade.getWidget("wnd_main");
            w.showAll();

            w.connect(new Window.DELETE_EVENT()
            {
                public boolean onDeleteEvent(Widget source, Event event)
                {
                    Gtk.mainQuit();
                    return false;
                }
            });

            Mediator.register(this);

            for(Download d : conf.getCurrentDownloads())
            {
                addDownload(d);
            }
        }
        catch(FileNotFoundException ex)
        {
            System.err.println("Can't find the Glade GUI file. Exiting...");
            System.exit(1);
        }
    }

    private void initTreeView(TreeView tree)
    {
        tree.getSelection().setMode(SelectionMode.MULTIPLE);

        final TreeViewColumn nameCol = tree.appendColumn();
        nameCol.setResizable(true);
        nameCol.setTitle("Name");
        final CellRendererText nameText = new CellRendererText(nameCol);
        nameText.setText(name);

        final TreeViewColumn progressCol = tree.appendColumn();
        progressCol.setResizable(true);
        progressCol.setTitle("Progress");
        final CellRendererText progressText = new CellRendererText(progressCol);
        progressText.setText(progress);

        final TreeViewColumn sizeCol = tree.appendColumn();
        sizeCol.setResizable(true);
        sizeCol.setTitle("Size");
        final CellRendererText sizeText = new CellRendererText(sizeCol);
        sizeText.setText(size);

        final TreeViewColumn totalsizeCol = tree.appendColumn();
        totalsizeCol.setResizable(true);
        totalsizeCol.setTitle("Total Size");
        final CellRendererText totalsizeText = new CellRendererText(totalsizeCol);
        totalsizeText.setText(totalsize);
       
        final TreeViewColumn speedCol = tree.appendColumn();
        speedCol.setResizable(true);
        speedCol.setTitle("Speed");
        final CellRendererText speedText = new CellRendererText(speedCol);
        speedText.setText(speed);

        final TreeViewColumn statusCol = tree.appendColumn();
        statusCol.setResizable(true);
        statusCol.setTitle("Status");
        final CellRendererText statusText = new CellRendererText(statusCol);
        statusText.setText(status);

        tree.setModel(model);
    }

    public void addDownload(Download tDownload)
    {
        TreeIter row = model.appendRow();
        model.setValue(row, download, tDownload);
        model.setValue(row, name, tDownload.getName());
        double percent = (float)tDownload.getSize() / (float)tDownload.getTotalSize() * 100;
        long pct = Math.round(percent);
        if(pct == 100 && tDownload.getSize() != tDownload.getTotalSize())
            pct = 99;
        model.setValue(row, progress, pct + "%");
        model.setValue(row, size, tDownload.getSize() + "B");
        model.setValue(row, totalsize, tDownload.getTotalSize() + "B");
        model.setValue(row, speed, "0 KB/s");
        model.setValue(row, status, tDownload.getStatus());

        ((TreeView)mainGlade.getWidget("treeview")).getSelection().selectRow(row);
    }

    public void notify(net.sf.gimme.event.Event event)
    {
        if(event instanceof DownloadSizeChanged)
        {
            Download d = ((DownloadSizeChanged)event).getDownload();

            TreeIter row = model.getIterFirst();
            if(row != null)
            {
                do
                {
                    if(model.getValue(row, download) == d)
                    {
                        model.setValue(row, size, d.getSize() + "B");
                        double percent = (float)d.getSize() / (float)d.getTotalSize() * 100;
                        model.setValue(row, progress, Math.round(percent) + "%");
                        model.setValue(row, speed, d.getSpeed()/1024f + " KB/s");
                    }
                }
                while(row.iterNext());
            }
        }
        else if(event instanceof DownloadStatusChanged)
        {
            Download d = ((DownloadStatusChanged)event).getDownload();

            TreeIter row = model.getIterFirst();
            if(row != null)
            {
                do
                {
                    if(model.getValue(row, download) == d)
                    {
                        model.setValue(row, speed, "");
                        model.setValue(row, status, d.getStatus());
                    }
                }
                while(row.iterNext());
            }
        }
    }

    public void onClicked(Widget widget, String userData)
    {
        if(userData.equals("add"))
        {
            try
            {
                new AddDialogHandler(Glade.parse(GLADE_PATH, "wnd_add"), this);
            }
            catch(FileNotFoundException ex)
            {
                ex.printStackTrace();
            }
        }
        else if(userData.equals("remove"))
        {
            TreeView tree = (TreeView)mainGlade.getWidget("treeview");

            TreePath[] rows = tree.getSelection().getSelectedRows();
            for(TreePath tp : rows)
            {
                TreeIter row = model.getIter(tp);
                Download d = (Download)model.getValue(row, download);
                d.removeTempFolder();
                model.removeRow(row);
            }
        }
        else if(userData.equals("pause"))
        {
            TreeView tree = (TreeView)mainGlade.getWidget("treeview");

            TreePath[] rows = tree.getSelection().getSelectedRows();
            for(TreePath tp : rows)
            {
                TreeIter row = model.getIter(tp);
                Download d = (Download)model.getValue(row, download);
                d.pause();
            }
        }
        else if(userData.equals("resume"))
        {
            TreeView tree = (TreeView)mainGlade.getWidget("treeview");

            TreePath[] rows = tree.getSelection().getSelectedRows();
            for(TreePath tp : rows)
            {
                TreeIter row = model.getIter(tp);
                Download d = (Download)model.getValue(row, download);
                d.resume();
            }
        }
        else if(userData.equals("preferences"))
        {
            try
            {
                new PreferencesDialogHandler(Glade.parse(GLADE_PATH, "wnd_preferences"));
            }
            catch(FileNotFoundException ex)
            {
                ex.printStackTrace();
            }
        }
    }
}
TOP

Related Classes of net.sf.gimme.UserInterface

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.