Skip to content

Commit

Permalink
Added multiple ruler instances
Browse files Browse the repository at this point in the history
Wired the Mac toolbar
Started on PC taskbar icon menu
Added SignalCommandMap swc
Refactored
  • Loading branch information
destroytoday committed Jan 26, 2010
1 parent bba130d commit 98c0412
Show file tree
Hide file tree
Showing 15 changed files with 630 additions and 257 deletions.
Binary file added libs/SignalCommandMap.swc
Binary file not shown.
4 changes: 2 additions & 2 deletions src/Dwarf-app.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<application xmlns="http://ns.adobe.com/air/application/1.5.3">
<application xmlns="http://ns.adobe.com/air/application/1.5.2">
<id>com.destroytoday.dwarf</id>
<filename>Dwarf</filename>
<name>Dwarf</name>
<version>1.0.0 Build 20100125.1</version>
<version>1.0.0 Build 20100125.2</version>
<description>Dwarf is a screen toolbox.</description>
<copyright>Copyright © 2010 Jonnie Hallman</copyright>
<initialWindow>
Expand Down
4 changes: 1 addition & 3 deletions src/Dwarf.as
@@ -1,6 +1,6 @@
package {
import com.destroytoday.dwarf.contexts.ApplicationContext;
import com.destroytoday.dwarf.views.ruler.RulerWindow;
import com.destroytoday.dwarf.views.ruler.RulerView;

import flash.display.Sprite;
import flash.ui.Multitouch;
Expand All @@ -23,8 +23,6 @@ package {
context = new ApplicationContext(this);

stage.frameRate = 50.0; //TODO - integrate framerate throttler

new RulerWindow(); //TODO - create tool model
}
}
}
31 changes: 29 additions & 2 deletions src/com/destroytoday/dwarf/contexts/ApplicationContext.as
@@ -1,16 +1,24 @@
package com.destroytoday.dwarf.contexts {
import com.destroytoday.dwarf.controllers.AddRulerCommand;
import com.destroytoday.dwarf.controllers.ToolController;
import com.destroytoday.dwarf.desktop.IconMenu;
import com.destroytoday.dwarf.desktop.Toolbar;
import com.destroytoday.dwarf.mediators.RulerMediator;
import com.destroytoday.dwarf.models.ToolModel;
import com.destroytoday.dwarf.signals.AddRulerSignal;
import com.destroytoday.dwarf.views.ruler.RulerView;
import com.destroytoday.util.ApplicationUtil;

import flash.display.DisplayObjectContainer;

import org.robotlegs.mvcs.Context;
import org.robotlegs.mvcs.SignalContext;

/**
* The ApplicationContext is the context of the application. (perfect description)
* @author Jonnie Hallman
*/
public class ApplicationContext extends Context {
public class ApplicationContext extends SignalContext {
/**
* Construct the ApplicationContext instance.
* @param contextView
Expand All @@ -24,9 +32,28 @@ package com.destroytoday.dwarf.contexts {
* @inheritDoc
*/
override public function startup():void {
injector.mapSingleton(ToolController);
injector.mapSingleton(ToolModel);
injector.mapSingleton(Toolbar);
injector.mapSingleton(IconMenu);

if (ApplicationUtil.mac) new Toolbar().setup();
injector.mapValue(AddRulerSignal, signalCommandMap.mapSignalClass(AddRulerSignal, AddRulerCommand));

if (ApplicationUtil.mac) {
var toolbar:Toolbar = new Toolbar();

injector.injectInto(toolbar);

toolbar.setup();
}

var iconMenu:IconMenu = new IconMenu();

injector.injectInto(iconMenu);

iconMenu.setup();

mediatorMap.mapView(RulerView, RulerMediator);
}
}
}
27 changes: 27 additions & 0 deletions src/com/destroytoday/dwarf/controllers/AddRulerCommand.as
@@ -0,0 +1,27 @@
package com.destroytoday.dwarf.controllers {
import com.destroytoday.dwarf.views.ruler.RulerView;

import org.robotlegs.mvcs.SignalCommand;

/**
* The AddRulerCommand class creates the RulerView instance's mediator.
* @author Jonnie Hallman
*/
public class AddRulerCommand extends SignalCommand {
[Inject]
public var ruler:RulerView;

/**
* @private
*/
public function AddRulerCommand() {
}

/**
* @inheritDoc
*/
override public function execute():void {
mediatorMap.createMediator(ruler);
}
}
}
59 changes: 59 additions & 0 deletions src/com/destroytoday/dwarf/controllers/ToolController.as
@@ -0,0 +1,59 @@
package com.destroytoday.dwarf.controllers {
import com.destroytoday.dwarf.contexts.ApplicationContext;
import com.destroytoday.dwarf.core.ITool;
import com.destroytoday.dwarf.models.ToolModel;
import com.destroytoday.dwarf.signals.AddRulerSignal;
import com.destroytoday.dwarf.views.ruler.RulerView;
import com.destroytoday.util.WindowUtil;

import org.robotlegs.mvcs.Actor;

/**
* The ToolController class adds and removes tools.
* @author Jonnie Hallman
*/
public class ToolController extends Actor {
[Inject]
public var model:ToolModel;

[Inject]
public var addRulerSignal:AddRulerSignal;

/**
* Constructs the ToolController instance.
*/
public function ToolController() {
}

/**
* Adds a ruler.
*/
public function addRuler():void {
var ruler:RulerView = new RulerView();

addRulerSignal.dispatch(ruler);

ruler.open();

model.addTool(ruler);
}

/**
* Removes the provided ruler.
* @param ruler
*/
public function removeRuler(ruler:RulerView):void {
ruler.close();
model.removeTool(ruler);
}

/**
* Removes the current tool, as indicated by the ToolModel.
*/
public function removeCurrentTool():void {
var tool:ITool = model.removeTool(model.currentTool);

if (tool) tool.close();
}
}
}
6 changes: 6 additions & 0 deletions src/com/destroytoday/dwarf/core/ITool.as
@@ -0,0 +1,6 @@
package com.destroytoday.dwarf.core {
public interface ITool {
function open():void;
function close():void;
}
}
68 changes: 68 additions & 0 deletions src/com/destroytoday/dwarf/desktop/IconMenu.as
@@ -0,0 +1,68 @@
package com.destroytoday.dwarf.desktop {
import com.destroytoday.desktop.NativeMenuPlus;
import com.destroytoday.dwarf.controllers.ToolController;
import com.destroytoday.util.ApplicationUtil;

import flash.desktop.DockIcon;
import flash.desktop.Icon;
import flash.desktop.NativeApplication;
import flash.desktop.SystemTrayIcon;
import flash.display.NativeMenuItem;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.ui.Keyboard;

public class IconMenu extends NativeMenuPlus {
[Inject]
public var toolController:ToolController;

public function IconMenu() {
}

public function setup():void {
var modifier:uint;

if (ApplicationUtil.mac) {
(NativeApplication.nativeApplication.icon as DockIcon).menu = this;

data =
<menu>
<item name="newRuler" label="New Ruler" />
<separator />
<item name="closeTool" label="Close Tool" />
</menu>;
} else {
(NativeApplication.nativeApplication.icon as SystemTrayIcon).menu = this;

data =
<menu>
<item name="newRuler" keyEquivalentModifiers="control" keyEquivalent="r" label="New Ruler" />
<separator />
<item name="closeTool" keyEquivalentModifiers="control" keyEquivalent="w" label="Close Tool" />
</menu>;
}

//add listeners
itemSelectSignal.add(iconMenuItemSelectHandler);
}

/**
* @private
* @param menu
* @param item
*/
protected function iconMenuItemSelectHandler(menu:NativeMenuPlus, item:NativeMenuItem):void {
switch (item.name) {
case "aboutDwarf":
navigateToURL(new URLRequest("http://github.com/destroytoday/Dwarf"));
break;
case "newRuler":
toolController.addRuler();
break;
case "closeTool":
toolController.removeCurrentTool();
break;
}
}
}
}
62 changes: 58 additions & 4 deletions src/com/destroytoday/dwarf/desktop/Toolbar.as
@@ -1,8 +1,14 @@
package com.destroytoday.dwarf.desktop {
import com.destroytoday.desktop.NativeMenuPlus;
import com.destroytoday.dwarf.controllers.ToolController;
import com.destroytoday.util.ApplicationUtil;
import com.destroytoday.util.WindowUtil;

import flash.desktop.NativeApplication;
import flash.display.NativeMenuItem;
import flash.net.URLRequest;
import flash.net.navigateToURL;
import flash.ui.Keyboard;

import org.robotlegs.mvcs.Actor;

Expand All @@ -11,6 +17,9 @@ package com.destroytoday.dwarf.desktop {
* @author Jonnie Hallman
*/
public class Toolbar extends Actor {
[Inject]
public var toolController:ToolController;

/**
* The Application menu item.
*/
Expand All @@ -31,6 +40,16 @@ package com.destroytoday.dwarf.desktop {
*/
public var fileMenu:NativeMenuPlus;

/**
* The Window menu item.
*/
public var windowItem:NativeMenuItem;

/**
* The Window menu.
*/
public var windowMenu:NativeMenuPlus;

/**
* Constructs the Toolbar instance.
*/
Expand All @@ -51,8 +70,8 @@ package com.destroytoday.dwarf.desktop {
<menu>
<item name="aboutDwarf" label="About Dwarf" />
<separator />
<item name="preferences" keyEquivalentModifiers="command" keyEquivalent="," label="Preferences..." />
<separator />
<!--<item name="preferences" keyEquivalentModifiers="command" keyEquivalent="," label="Preferences..." />
<separator />-->
<item name="quit" keyEquivalentModifiers="command" keyEquivalent="q" label="Quit" />
</menu>;

Expand All @@ -73,9 +92,24 @@ package com.destroytoday.dwarf.desktop {

fileItem.submenu = fileMenu;

//
// Window Item / Menu
//
windowItem = NativeApplication.nativeApplication.menu.getItemAt(3);
windowMenu = new NativeMenuPlus();

windowMenu.data =
<menu>
<item name="maximizeWindow" keyEquivalentModifiers="command" keyEquivalent="M" label="Maximize" />
<item name="minimizeWindow" keyEquivalentModifiers="command" keyEquivalent="m" label="Minimize" />
</menu>;

windowItem.submenu = windowMenu;

//add listeners
applicationMenu.itemSelectSignal.add(applicationMenuItemSelectHandler);
fileMenu.itemSelectSignal.add(fileMenuItemSelectHandler);
windowMenu.itemSelectSignal.add(windowMenuItemSelectHandler);
}

/**
Expand All @@ -86,11 +120,12 @@ package com.destroytoday.dwarf.desktop {
protected function applicationMenuItemSelectHandler(menu:NativeMenuPlus, item:NativeMenuItem):void {
switch (item.name) {
case "aboutDwarf":
navigateToURL(new URLRequest("http://github.com/destroytoday/Dwarf"));
break;
case "preferences":
break;
case "quit":
NativeApplication.nativeApplication.exit();
WindowUtil.closeAll(true);
break;
}
}
Expand All @@ -103,9 +138,28 @@ package com.destroytoday.dwarf.desktop {
protected function fileMenuItemSelectHandler(menu:NativeMenuPlus, item:NativeMenuItem):void {
switch (item.name) {
case "newRuler":
toolController.addRuler();
break;
case "closeTool":
NativeApplication.nativeApplication.activeWindow.close();
toolController.removeCurrentTool();
break;
}
}

/**
* @private
* @param menu
* @param item
*/
protected function windowMenuItemSelectHandler(menu:NativeMenuPlus, item:NativeMenuItem):void {
if (!NativeApplication.nativeApplication.activeWindow) return;

switch (item.name) {
case "maximizeWindow":
NativeApplication.nativeApplication.activeWindow.maximize();
break;
case "minimizeWindow":
NativeApplication.nativeApplication.activeWindow.minimize();
break;
}
}
Expand Down

0 comments on commit 98c0412

Please sign in to comment.