Virgil Dupras avatar Virgil Dupras committed d4b03da

Converted the registration system to Fairware.

Comments (0)

Files changed (8)

-da82e340b5e584af85d7c974b528f8d41596ce0b cocoalib
-d8560bb501be108054ef33a937f172a04c979e25 hscommon
-7ecb5c7a4d7a1e036d2751e23d3806aa152e9ea2 qtlib
+35618b290b27703847712c03563b43115754b1fe cocoalib
+88de47f56edce09bf805b6db3d8c260b4eb47b61 hscommon
+1ce0e6b7b67350151555fa6e2d28b93bec8657ec qtlib

cocoa/AppDelegate.h

 @interface AppDelegate : NSObject
 {
     IBOutlet PyMusicGuru *py;
-    IBOutlet NSMenuItem *unlockMenuItem;
     
     DesignWindow *_designWindow;
     DetailsPanel *_detailsPanel;
 - (IBAction)showDetails:(id)sender;
 - (IBAction)showIgnoreBox:(id)sender;
 - (IBAction)showLocations:(id)sender;
-- (IBAction)unlockApp:(id)sender;
 - (IBAction)updateCollection:(id)sender;
 
 /* Public */

cocoa/AppDelegate.m

 */
 
 #import "AppDelegate.h"
-#import "../cocoalib/ProgressController.h"
-#import "../cocoalib/RegistrationInterface.h"
-#import "../cocoalib/Dialogs.h"
-#import "../cocoalib/Utils.h"
+#import "ProgressController.h"
+#import "HSFairwareReminder.h"
+#import "Dialogs.h"
+#import "Utils.h"
 #import "Consts.h"
 
 @implementation AppDelegate
     [_locationPanel showWindow:self];
 }
 
-- (IBAction)unlockApp:(id)sender
-{
-    if ([[self py] isRegistered])
-        return;
-    RegistrationInterface *ri = [[RegistrationInterface alloc] initWithApp:py];
-    if ([ri enterCode] == NSOKButton) {
-        [unlockMenuItem setTitle:@"Thanks for buying musicGuru!"];
-    }
-    [ri release];
-}
-
 - (IBAction)updateCollection:(id)sender
 {
     [self showLocations:sender];
 /* Public */
 - (BOOL)canMaterialize
 {
-    if (![py isRegistered]) {
-        [Dialogs showMessage:@"You have to purchase musicGuru to materialize designs."];
-        return NO;
-    }
     return [_locationPanel canMaterialize];
 }
 
 
 - (void)applicationDidFinishLaunching:(NSNotification *)aNotification
 {
-    if ([RegistrationInterface showNagWithApp:py]) {
-        [unlockMenuItem setTitle:@"Thanks for buying musicGuru!"];
-    }
+    [HSFairwareReminder showNagWithApp:py];
     [[ProgressController mainProgressController] setWorker:py];
     [self updateCollection:self];
 }

cocoa/mg_cocoa.py

 import objc
 
 from hscommon import job
-from hscommon.cocoa.inter import signature, PyRegistrable
+from hscommon.cocoa.inter import signature, PyFairware
 from hscommon.cocoa.objcmin import NSObject
 
 from core import app_cocoa, design
 class PyApp(NSObject):
     pass #fake class
 
-class PyMusicGuru(PyRegistrable):
+class PyMusicGuru(PyFairware):
     def init(self):
         self = super(PyMusicGuru,self).init()
         self.py = app_cocoa.MusicGuru()

cocoa/musicguru.xcodeproj/project.pbxproj

 /* Begin PBXBuildFile section */
 		8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
 		8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+		CE1AAFF9125470C200507F4B /* FairwareReminder.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE1AAFF7125470C200507F4B /* FairwareReminder.xib */; };
+		CE1AAFFD125470D300507F4B /* HSFairwareReminder.m in Sources */ = {isa = PBXBuildFile; fileRef = CE1AAFFB125470D300507F4B /* HSFairwareReminder.m */; };
 		CE28DB23116F0B6100A93DD8 /* ErrorReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE28DB20116F0B6100A93DD8 /* ErrorReportWindow.xib */; };
 		CE28DB24116F0B6100A93DD8 /* progress.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE28DB21116F0B6100A93DD8 /* progress.xib */; };
-		CE28DB25116F0B6100A93DD8 /* registration.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE28DB22116F0B6100A93DD8 /* registration.xib */; };
 		CE28DB2A116F0B7300A93DD8 /* Outline.m in Sources */ = {isa = PBXBuildFile; fileRef = CE28DB27116F0B7300A93DD8 /* Outline.m */; };
 		CE28DB2B116F0B7300A93DD8 /* Table.m in Sources */ = {isa = PBXBuildFile; fileRef = CE28DB29116F0B7300A93DD8 /* Table.m */; };
 		CE2CD3D80A94822200C0DA8D /* LocationPanel.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CE2CD3D60A94822200C0DA8D /* LocationPanel.h */; };
 		CEA0E9BC0FE1210400ABA3F7 /* BRSingleLineFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA0E9AB0FE1210400ABA3F7 /* BRSingleLineFormatter.m */; };
 		CEA0E9BE0FE1210400ABA3F7 /* Dialogs.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA0E9AF0FE1210400ABA3F7 /* Dialogs.m */; };
 		CEA0E9C00FE1210400ABA3F7 /* ProgressController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA0E9B30FE1210400ABA3F7 /* ProgressController.m */; };
-		CEA0E9C10FE1210400ABA3F7 /* RegistrationInterface.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA0E9B70FE1210400ABA3F7 /* RegistrationInterface.m */; };
 		CEA0E9C30FE1210400ABA3F7 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = CEA0E9BB0FE1210400ABA3F7 /* Utils.m */; };
 		CEB4E7FC09CEF4CE00A27957 /* DesignWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = CEB4E7FA09CEF4CE00A27957 /* DesignWindow.m */; };
 		CEB4E7FD09CEF4CE00A27957 /* DesignWindow.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = CEB4E7FB09CEF4CE00A27957 /* DesignWindow.h */; };
 		29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
 		8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
 		8D1107320486CEB800E47090 /* musicGuru.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = musicGuru.app; sourceTree = BUILT_PRODUCTS_DIR; };
+		CE1AAFF8125470C200507F4B /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = ../cocoalib/en.lproj/FairwareReminder.xib; sourceTree = SOURCE_ROOT; };
+		CE1AAFFA125470D300507F4B /* HSFairwareReminder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = HSFairwareReminder.h; path = ../cocoalib/HSFairwareReminder.h; sourceTree = SOURCE_ROOT; };
+		CE1AAFFB125470D300507F4B /* HSFairwareReminder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = HSFairwareReminder.m; path = ../cocoalib/HSFairwareReminder.m; sourceTree = SOURCE_ROOT; };
+		CE1AAFFC125470D300507F4B /* PyFairware.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyFairware.h; path = ../cocoalib/PyFairware.h; sourceTree = SOURCE_ROOT; };
 		CE28DB20116F0B6100A93DD8 /* ErrorReportWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ErrorReportWindow.xib; sourceTree = "<group>"; };
 		CE28DB21116F0B6100A93DD8 /* progress.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = progress.xib; sourceTree = "<group>"; };
-		CE28DB22116F0B6100A93DD8 /* registration.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = registration.xib; sourceTree = "<group>"; };
 		CE28DB26116F0B7300A93DD8 /* Outline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Outline.h; sourceTree = "<group>"; };
 		CE28DB27116F0B7300A93DD8 /* Outline.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Outline.m; sourceTree = "<group>"; };
 		CE28DB28116F0B7300A93DD8 /* Table.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Table.h; sourceTree = "<group>"; };
 		CEA0E9B20FE1210400ABA3F7 /* ProgressController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProgressController.h; path = ../cocoalib/ProgressController.h; sourceTree = SOURCE_ROOT; };
 		CEA0E9B30FE1210400ABA3F7 /* ProgressController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ProgressController.m; path = ../cocoalib/ProgressController.m; sourceTree = SOURCE_ROOT; };
 		CEA0E9B40FE1210400ABA3F7 /* PyApp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyApp.h; path = ../cocoalib/PyApp.h; sourceTree = SOURCE_ROOT; };
-		CEA0E9B50FE1210400ABA3F7 /* PyRegistrable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PyRegistrable.h; path = ../cocoalib/PyRegistrable.h; sourceTree = SOURCE_ROOT; };
-		CEA0E9B60FE1210400ABA3F7 /* RegistrationInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegistrationInterface.h; path = ../cocoalib/RegistrationInterface.h; sourceTree = SOURCE_ROOT; };
-		CEA0E9B70FE1210400ABA3F7 /* RegistrationInterface.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RegistrationInterface.m; path = ../cocoalib/RegistrationInterface.m; sourceTree = SOURCE_ROOT; };
 		CEA0E9BA0FE1210400ABA3F7 /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = ../cocoalib/Utils.h; sourceTree = SOURCE_ROOT; };
 		CEA0E9BB0FE1210400ABA3F7 /* Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Utils.m; path = ../cocoalib/Utils.m; sourceTree = SOURCE_ROOT; };
 		CEB4E7FA09CEF4CE00A27957 /* DesignWindow.m */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.objc; path = DesignWindow.m; sourceTree = "<group>"; };
 		CE28DB1F116F0B6100A93DD8 /* xib */ = {
 			isa = PBXGroup;
 			children = (
+				CE1AAFF7125470C200507F4B /* FairwareReminder.xib */,
 				CE28DB20116F0B6100A93DD8 /* ErrorReportWindow.xib */,
 				CE28DB21116F0B6100A93DD8 /* progress.xib */,
-				CE28DB22116F0B6100A93DD8 /* registration.xib */,
 			);
 			name = xib;
 			path = ../cocoalib/xib;
 				CEA0E9AF0FE1210400ABA3F7 /* Dialogs.m */,
 				CEA0E9B20FE1210400ABA3F7 /* ProgressController.h */,
 				CEA0E9B30FE1210400ABA3F7 /* ProgressController.m */,
+				CE1AAFFA125470D300507F4B /* HSFairwareReminder.h */,
+				CE1AAFFB125470D300507F4B /* HSFairwareReminder.m */,
+				CE1AAFFC125470D300507F4B /* PyFairware.h */,
 				CEA0E9B40FE1210400ABA3F7 /* PyApp.h */,
-				CEA0E9B50FE1210400ABA3F7 /* PyRegistrable.h */,
-				CEA0E9B60FE1210400ABA3F7 /* RegistrationInterface.h */,
-				CEA0E9B70FE1210400ABA3F7 /* RegistrationInterface.m */,
 				CEA0E9BA0FE1210400ABA3F7 /* Utils.h */,
 				CEA0E9BB0FE1210400ABA3F7 /* Utils.m */,
 			);
 			buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "musicguru" */;
 			compatibilityVersion = "Xcode 3.0";
 			hasScannedForEncodings = 1;
+			knownRegions = (
+				English,
+				Japanese,
+				French,
+				German,
+				en,
+			);
 			mainGroup = 29B97314FDCFA39411CA2CEA /* musicguru_cocoa */;
 			projectDirPath = "";
 			projectRoot = "";
 				CEC9A8D209D86A6A0038B2D6 /* musicguru_help in Resources */,
 				CE28DB23116F0B6100A93DD8 /* ErrorReportWindow.xib in Resources */,
 				CE28DB24116F0B6100A93DD8 /* progress.xib in Resources */,
-				CE28DB25116F0B6100A93DD8 /* registration.xib in Resources */,
 				CE31A306116F302200AF3D6D /* AddLocation.xib in Resources */,
 				CE31A307116F302200AF3D6D /* Design.xib in Resources */,
 				CE31A308116F302200AF3D6D /* Details.xib in Resources */,
 				CE31A30C116F302200AF3D6D /* MassRename.xib in Resources */,
 				CE31A30D116F302200AF3D6D /* Split.xib in Resources */,
 				CEFDEC00116F5063006266D5 /* dsa_pub.pem in Resources */,
+				CE1AAFF9125470C200507F4B /* FairwareReminder.xib in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 				CEA0E9BC0FE1210400ABA3F7 /* BRSingleLineFormatter.m in Sources */,
 				CEA0E9BE0FE1210400ABA3F7 /* Dialogs.m in Sources */,
 				CEA0E9C00FE1210400ABA3F7 /* ProgressController.m in Sources */,
-				CEA0E9C10FE1210400ABA3F7 /* RegistrationInterface.m in Sources */,
 				CEA0E9C30FE1210400ABA3F7 /* Utils.m in Sources */,
 				CE28DB2A116F0B7300A93DD8 /* Outline.m in Sources */,
 				CE28DB2B116F0B7300A93DD8 /* Table.m in Sources */,
+				CE1AAFFD125470D300507F4B /* HSFairwareReminder.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
+/* Begin PBXVariantGroup section */
+		CE1AAFF7125470C200507F4B /* FairwareReminder.xib */ = {
+			isa = PBXVariantGroup;
+			children = (
+				CE1AAFF8125470C200507F4B /* en */,
+			);
+			name = FairwareReminder.xib;
+			path = ../cocoalib/xib;
+			sourceTree = SOURCE_ROOT;
+		};
+/* End PBXVariantGroup section */
+
 /* Begin XCBuildConfiguration section */
 		C01FCF4C08A954540054247B /* Release */ = {
 			isa = XCBuildConfiguration;

cocoa/xib/MainMenu.xib

 <archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
 	<data>
 		<int key="IBDocument.SystemTarget">1050</int>
-		<string key="IBDocument.SystemVersion">10D573</string>
-		<string key="IBDocument.InterfaceBuilderVersion">740</string>
+		<string key="IBDocument.SystemVersion">10F569</string>
+		<string key="IBDocument.InterfaceBuilderVersion">788</string>
 		<string key="IBDocument.AppKitVersion">1038.29</string>
-		<string key="IBDocument.HIToolboxVersion">460.00</string>
+		<string key="IBDocument.HIToolboxVersion">461.00</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">740</string>
+			<string key="NS.object.0">788</string>
 		</object>
 		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
 			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="722"/>
+			<integer value="57"/>
 		</object>
 		<object class="NSArray" key="IBDocument.PluginDependencies">
 			<bool key="EncodedWithXMLCoder">YES</bool>
 									<reference key="NSOnImage" ref="875257599"/>
 									<reference key="NSMixedImage" ref="697769234"/>
 								</object>
-								<object class="NSMenuItem" id="1052429693">
-									<reference key="NSMenu" ref="146732087"/>
-									<string key="NSTitle">Unlock musicGuru</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="875257599"/>
-									<reference key="NSMixedImage" ref="697769234"/>
-								</object>
 								<object class="NSMenuItem" id="399373345">
 									<reference key="NSMenu" ref="146732087"/>
 									<string key="NSTitle">Check for updates...</string>
 					<int key="connectionID">767</int>
 				</object>
 				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">unlockApp:</string>
-						<reference key="source" ref="659667561"/>
-						<reference key="destination" ref="1052429693"/>
-					</object>
-					<int key="connectionID">770</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">unlockMenuItem</string>
-						<reference key="source" ref="659667561"/>
-						<reference key="destination" ref="1052429693"/>
-					</object>
-					<int key="connectionID">771</int>
-				</object>
-				<object class="IBConnectionRecord">
 					<object class="IBOutletConnection" key="connection">
 						<string key="label">py</string>
 						<reference key="source" ref="659667561"/>
 							<reference ref="43098452"/>
 							<reference ref="1038108666"/>
 							<reference ref="862053068"/>
-							<reference ref="1052429693"/>
 							<reference ref="399373345"/>
 						</object>
 						<reference key="parent" ref="967411986"/>
 						<reference key="parent" ref="146732087"/>
 					</object>
 					<object class="IBObjectRecord">
-						<int key="objectID">769</int>
-						<reference key="object" ref="1052429693"/>
-						<reference key="parent" ref="146732087"/>
-					</object>
-					<object class="IBObjectRecord">
 						<int key="objectID">893</int>
 						<reference key="object" ref="399373345"/>
 						<reference key="parent" ref="146732087"/>
 					<string>5.ImportedFromIB2</string>
 					<string>56.IBPluginDependency</string>
 					<string>56.ImportedFromIB2</string>
+					<string>57.IBEditorWindowLastContentRect</string>
 					<string>57.IBPluginDependency</string>
 					<string>57.ImportedFromIB2</string>
 					<string>58.IBPluginDependency</string>
 					<string>754.ImportedFromIB2</string>
 					<string>766.IBPluginDependency</string>
 					<string>766.ImportedFromIB2</string>
-					<string>769.IBPluginDependency</string>
-					<string>769.ImportedFromIB2</string>
 					<string>774.IBPluginDependency</string>
 					<string>774.ImportedFromIB2</string>
 					<string>776.IBPluginDependency</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
+					<string>{{100, 682}, {228, 143}}</string>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<boolean value="YES"/>
 					<boolean value="YES"/>
 					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
 					<boolean value="YES"/>
 							<string>showDetails:</string>
 							<string>showIgnoreBox:</string>
 							<string>showLocations:</string>
-							<string>unlockApp:</string>
 							<string>updateCollection:</string>
 						</object>
 						<object class="NSMutableArray" key="dict.values">
 							<string>id</string>
 							<string>id</string>
 							<string>id</string>
-							<string>id</string>
+						</object>
+					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<bool key="EncodedWithXMLCoder">YES</bool>
+						<object class="NSArray" key="dict.sortedKeys">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<string>addLocation:</string>
+							<string>openWebsite:</string>
+							<string>redirectToBoard:</string>
+							<string>removeLocation:</string>
+							<string>showDesignBoard:</string>
+							<string>showDetails:</string>
+							<string>showIgnoreBox:</string>
+							<string>showLocations:</string>
+							<string>updateCollection:</string>
+						</object>
+						<object class="NSMutableArray" key="dict.values">
+							<bool key="EncodedWithXMLCoder">YES</bool>
+							<object class="IBActionInfo">
+								<string key="name">addLocation:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">openWebsite:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">redirectToBoard:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">removeLocation:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showDesignBoard:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showDetails:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showIgnoreBox:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">showLocations:</string>
+								<string key="candidateClassName">id</string>
+							</object>
+							<object class="IBActionInfo">
+								<string key="name">updateCollection:</string>
+								<string key="candidateClassName">id</string>
+							</object>
 						</object>
 					</object>
 					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>py</string>
-							<string>unlockMenuItem</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>PyMusicGuru</string>
-							<string>NSMenuItem</string>
+						<string key="NS.key.0">py</string>
+						<string key="NS.object.0">PyMusicGuru</string>
+					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">py</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">py</string>
+							<string key="candidateClassName">PyMusicGuru</string>
 						</object>
 					</object>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">PyApp</string>
-					<string key="superclassName">PyRegistrable</string>
+					<string key="superclassName">PyFairware</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBProjectSource</string>
 						<string key="minorKey">PyApp.h</string>
 				</object>
 				<object class="IBPartialClassDescription">
 					<string key="className">PyApp</string>
-					<string key="superclassName">PyRegistrable</string>
+					<string key="superclassName">PyFairware</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="majorKey">IBUserSource</string>
 						<string key="minorKey"/>
 					</object>
 				</object>
 				<object class="IBPartialClassDescription">
-					<string key="className">PyRegistrable</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">PyRegistrable.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
 					<string key="className">SUUpdater</string>
 					<string key="superclassName">NSObject</string>
 					<object class="IBClassDescriptionSource" key="sourceIdentifier">
 						<string key="NS.key.0">checkForUpdates:</string>
 						<string key="NS.object.0">id</string>
 					</object>
+					<object class="NSMutableDictionary" key="actionInfosByName">
+						<string key="NS.key.0">checkForUpdates:</string>
+						<object class="IBActionInfo" key="NS.object.0">
+							<string key="name">checkForUpdates:</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
 					<object class="NSMutableDictionary" key="outlets">
 						<string key="NS.key.0">delegate</string>
 						<string key="NS.object.0">id</string>
 					</object>
+					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
+						<string key="NS.key.0">delegate</string>
+						<object class="IBToOneOutletInfo" key="NS.object.0">
+							<string key="name">delegate</string>
+							<string key="candidateClassName">id</string>
+						</object>
+					</object>
 					<reference key="sourceIdentifier" ref="749869733"/>
 				</object>
 			</object>
 		</object>
 		<int key="IBDocument.localizationMode">0</int>
+		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
 		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
 			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
 			<integer value="1050" key="NS.object.0"/>
 		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
 		<string key="IBDocument.LastKnownRelativeProjectPath">../musicguru.xcodeproj</string>
 		<int key="IBDocument.defaultPropertyAccessControl">3</int>
+		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+			<bool key="EncodedWithXMLCoder">YES</bool>
+			<object class="NSArray" key="dict.sortedKeys">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>NSMenuCheckmark</string>
+				<string>NSMenuMixedState</string>
+			</object>
+			<object class="NSMutableArray" key="dict.values">
+				<bool key="EncodedWithXMLCoder">YES</bool>
+				<string>{9, 8}</string>
+				<string>{7, 2}</string>
+			</object>
+		</object>
 	</data>
 </archive>
 
 class MusicGuru(RegistrableApplication):
     VERSION = '1.4.1'
-    DEMO_LIMIT_DESC = "In the demo version, it's not possible to materialize designs."
     
     def __init__(self, appdata=None):
-        RegistrableApplication.__init__(self, appid=2)
+        RegistrableApplication.__init__(self, appid=3)
         if appdata is None:
             appdata = op.expanduser(op.join('~', '.hsoftdata', 'musicguru'))
         self.appdata = appdata
     JOB_MATERIALIZE_MOVE: "Moving",
 }
 
-def demo_check(method):
-    def wrapper(self, *args, **kwargs):
-        if not self.registered:
-            msg = "It's not possible to materialize your design in demo mode."
-            QMessageBox.information(self.mainWindow, "Demo Limitation", msg)
-        else:
-            return method(self, *args, **kwargs)
-    
-    return wrapper
-
 class MusicGuru(MusicGuruBase, ApplicationBase):
     LOGO_NAME = 'mg_logo'
     
         if self.reg.ask_for_code():
             self._setup_as_registered()
     
-    @demo_check
     def copyOrMove(self, copy):
         def onNeedCd(location):
             # We can't do anything GUI related in a separate thread with Qt. Since copy/move
             return
         self.removeLocation(location)
     
-    @demo_check
     def renameInRespectiveLocations(self):
         def do(j):
             MusicGuruBase.RenameInRespectiveLocations(self, j)
     def applicationFinishedLaunching(self):
         self.reg = Registration(self)
         self.set_registration(self.prefs.registration_code, self.prefs.registration_email)
-        if not self.registered:
+        if not self.registered and self.unpaid_hours >= 1:
             self.reg.show_nag()
         self.mainWindow.show()
         self.showLocationPanel()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.