-Xms64m\r
-Xmx128m\r
--DcharactersDir=%EXEDIR%\characters\r
--DappConfigFile=%EXEDIR%\appConfig.xml\r
+"-DcharactersDir=%EXEDIR%\characters"\r
+"-DappConfigFile=%EXEDIR%\appConfig.xml"\r
<launch4jConfig>
<dontWrapJar>false</dontWrapJar>
<headerType>gui</headerType>
- <jar>dist/CharacterManaJ.jar</jar>
- <outfile>dist/charactermanaj.exe</outfile>
+ <jar>dist\CharacterManaJ.jar</jar>
+ <outfile>dist\charactermanaj.exe</outfile>
<errTitle></errTitle>
<cmdLine></cmdLine>
<chdir></chdir>
<initialHeapSize>64</initialHeapSize>
<maxHeapSize>128</maxHeapSize>
</jre>
+ <versionInfo>
+ <fileVersion>0.9.9.5</fileVersion>
+ <txtFileVersion>0.995</txtFileVersion>
+ <fileDescription>CharacterManaJ</fileDescription>
+ <copyright>http://sourceforge.jp/projects/charactermanaj/</copyright>
+ <productVersion>0.9.9.5</productVersion>
+ <txtProductVersion>0.995</txtProductVersion>
+ <productName>CharacterManaJ</productName>
+ <companyName>seraphy@users.sourceforge.jp</companyName>
+ <internalName>CharacterManaJ</internalName>
+ <originalFilename>charactermanaj.exe</originalFilename>
+ </versionInfo>
</launch4jConfig>
\ No newline at end of file
<li>10.5 Leopard (Intel) JavaSE6</li>\r
<li>10.6 Snow Leopard (Intel) JavaSE6</li>\r
<li>10.7 Lion (Intel) JavaSE6 (Java for Mac OS X 10.7 is required.)</li>\r
- <li>10.7 Lion (Intel) Java7 (Oracle, Java7u17 or later)</li>\r
- <li>10.8 Mountain Lion (Intel) JavaSE6 (Java for Mac OS X 10.7 is required.)</li>\r
- <li>10.8 Mountain Lion (Intel) Java7 (Oracle, java7u17 or later)</li>\r
+ <li>10.7 Lion (Intel) Java7 (Oracle, Java7u45 or later)</li>\r
+ <li>10.8 Mountain Lion (Intel) JavaSE6u65 or later (Java for OS X 2013-005 is required.)</li>\r
+ <li>10.8 Mountain Lion (Intel) Java7 (Oracle, java7u45 or later)</li>\r
+ <li>10.9 Marvericks (Intel) JavaSE6u65 or later (Java for OS X 2013-005 is required.)</li>\r
+ <li>10.9 Marvericks (Intel) Java7 (Oracle, java7u45 or later)</li>\r
</ul>\r
</li>\r
<li>Microsoft Windows\r
<li>Windows 2000 SP4 (32Bit) JavaSE6 (<font color="red">Japanese Only</font>)</li>\r
<li>Windows XP SP2 or later (32Bit) JavaSE6</li>\r
<li>Windows Vista SP1 or later (32/64Bit) JavaSE6</li>\r
- <li>Windows 7 (32/64Bit) JavaSE6, Java7u10 or later</li>\r
- <li>Windows 8 (32/64Bit) JavaSE6, Java7u10 or later</li>\r
+ <li>Windows 7 (32/64Bit) JavaSE6, Java7u45 or later</li>\r
+ <li>Windows 8 (32/64Bit) JavaSE6, Java7u45 or later</li>\r
+ <li>Windows 8.1 (32/64Bit) JavaSE6, Java7u45 or later</li>\r
</ul>\r
<span style="color: red; font-weight: bold;">Installation of language support of East Asia is indispensable.</span><br>\r
(Control Panel / Regional and Language Options / Language Tab / Install files for East Asian languages)\r
<li>10.5 Leopard (Intel) JavaSE6</li>\r
<li>10.6 Snow Leopard (Intel) JavaSE6</li>\r
<li>10.7 Lion (Intel) JavaSE6 (Java for Mac OS X 10.7 is required.)</li>\r
- <li>10.7 Lion (Intel) Java7 (Oracle, Java7u17 or later)</li>\r
- <li>10.8 Mountain Lion (Intel) JavaSE6 (Java for Mac OS X 10.7 is required.)</li>\r
- <li>10.8 Mountain Lion (Intel) Java7 (Oracle, java7u17 or later)</li>\r
+ <li>10.7 Lion (Intel) Java7 (Oracle, Java7u45 or later)</li>\r
+ <li>10.8 Mountain Lion (Intel) JavaSE6u65 or later (Java for OS X 2013-005 is required.)</li>\r
+ <li>10.8 Mountain Lion (Intel) Java7 (Oracle, java7u45 or later)</li>\r
+ <li>10.9 Marvericks (Intel) JavaSE6u65 or later (Java for OS X 2013-005 is required.)</li>\r
+ <li>10.9 Marvericks (Intel) Java7 (Oracle, java7u45 or later)</li>\r
</ul>\r
</li>\r
<li>Microsoft Windows\r
<li>Windows 2000 SP4 (32Bit) JavaSE6 (日本語版のみ)</li>\r
<li>Windows XP SP2+ (32Bit) JavaSE6 (日本語版、それ以外はEast asian languagesをコンパネからインストール済みのこと)</li>\r
<li>Windows Vista SP1以降 (32/64Bit) JavaSE6</li>\r
- <li>Windows 7 (32/64Bit) JavaSE6, Java7u10 or later</li>\r
- <li>Windows 8 (32/64Bit) JavaSE6, Java7u10 or later</li>\r
+ <li>Windows 7 (32/64Bit) JavaSE6, Java7u45 or later</li>\r
+ <li>Windows 8 (32/64Bit) JavaSE6, Java7u45 or later</li>\r
+ <li>Windows 8.1 (32/64Bit) JavaSE6, Java7u45 or later</li>\r
</ul>\r
</li>\r
<li>Linux\r
<p>J2SE5で記述しているため、J2SE5のデスクトップをサポートした実行環境があれば基本的には動作すると思います。</p>\r
<p>Windows環境ではJ2SE5でも動作しますが、Java7を推奨します。</p>\r
<p>Mac OS Xも同様にJava7(Oracle)を推奨します。(AppleのJavaSE5/JavaSE6でも動作します。)</p>\r
+<p>OS X 10.7以降は標準ではJavaはインストールされていません。AppleのサイトからJava6をインストールするか、OracleのサイトからJava7をインストールする必要があります.<p>\r
<p>Mac OS X上での本アプリケーションは、AppleのJava5/6用と、OracleのJava7用と、それぞれ専用版のアプリケーションに分けています。</p>\r
<p>メモリは、Mac OS Xのアプリケーションバンドル形式、またはWindowsのEXE形式での配布形式では、初期状態で96MB、最大で128MBの設定を行っています。</p>\r
<p>実行可能JAR形式ではJREのデフォルトのサイズが使われます。これは搭載している物理メモリによって割り当てられるサイズが64MBあるいは256MBのように変わります。</p>\r
vendor=seraphy@seraphyware\r
specification_version=1.0\r
-implements_version=0.994\r
+implements_version=0.995\r
\r
import java.awt.Font;\r
import java.io.File;\r
+import java.lang.Thread.UncaughtExceptionHandler;\r
import java.lang.reflect.Method;\r
import java.util.logging.Level;\r
import java.util.logging.Logger;\r
// ログの設定を読み取る.(OSにより、設定ファイルの位置が異なることに注意)\r
ApplicationLoggerConfigurator.configure();\r
\r
- // SwingのEDT内の例外ハンドラの設定 (ロギングするだけ)\r
- System.setProperty("sun.awt.exception.handler",\r
- AWTExceptionLoggingHandler.class.getName());\r
+ if (getJavaVersion() >= 1.7) {\r
+ // java7以降は、sun.awt.exception.handlerが使えないので、\r
+ // EDTスレッドで未処理例外ハンドラを明示的に設定する.\r
+ final AWTExceptionLoggingHandler logHandler = new AWTExceptionLoggingHandler();\r
+ SwingUtilities.invokeLater(new Runnable() {\r
+ public void run() {\r
+ final UncaughtExceptionHandler handler = Thread\r
+ .getDefaultUncaughtExceptionHandler();\r
+ Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {\r
+ public void uncaughtException(Thread t, Throwable ex) {\r
+ logHandler.handle(ex);\r
+ if (handler != null) {\r
+ handler.uncaughtException(t, ex);\r
+ }\r
+ }\r
+ });\r
+ }\r
+ });\r
+\r
+ } else {\r
+ // SwingのEDT内の例外ハンドラの設定 (ロギングするだけ)\r
+ // (ただし、unofficial trickである.)\r
+ System.setProperty("sun.awt.exception.handler",\r
+ AWTExceptionLoggingHandler.class.getName());\r
+ }\r
\r
} catch (Throwable ex) {\r
// ロガーの準備に失敗した場合はロガーがないかもなので\r
* \r
* @return バージョン\r
*/\r
- private static double getJavaVersion() {\r
+ public static double getJavaVersion() {\r
try {\r
String version = System.getProperty("java.version");\r
String[] versions = version.split("\\.");\r
--- /dev/null
+package charactermanaj.model;\r
+\r
+import java.util.EventObject;\r
+\r
+public class CharacterDataChangeEvent extends EventObject {\r
+\r
+ private static final long serialVersionUID = -99746684880598436L;\r
+\r
+ private CharacterData characterData;\r
+\r
+ private boolean changeStructure;\r
+\r
+ private boolean reloadPartsAndFavorites;\r
+\r
+ public CharacterDataChangeEvent(Object src, CharacterData characterData,\r
+ boolean changeStructure, boolean reloadPartsAndFavorites) {\r
+ super(src);\r
+ this.characterData = characterData;\r
+ this.changeStructure = changeStructure;\r
+ this.reloadPartsAndFavorites = reloadPartsAndFavorites;\r
+ }\r
+\r
+ public CharacterData getCharacterData() {\r
+ return characterData;\r
+ }\r
+\r
+ public boolean isChangeStructure() {\r
+ return changeStructure;\r
+ }\r
+\r
+ public boolean isReloadPartsAndFavorites() {\r
+ return reloadPartsAndFavorites;\r
+ }\r
+}\r
--- /dev/null
+package charactermanaj.model;\r
+\r
+import java.util.EventListener;\r
+\r
+public interface CharacterDataChangeListener extends EventListener {\r
+\r
+ void notifyChangeCharacterData(CharacterDataChangeEvent e);\r
+\r
+}\r
--- /dev/null
+package charactermanaj.model;\r
+\r
+import javax.swing.event.EventListenerList;\r
+\r
+\r
+/**\r
+ * キャラクターデータが変更されたことを通知するためのメカニズム\r
+ * \r
+ * @author seraphy\r
+ * \r
+ */\r
+public abstract class CharacterDataChangeObserver {\r
+\r
+ private static CharacterDataChangeObserver inst = new CharacterDataChangeObserverImpl();\r
+\r
+ public static CharacterDataChangeObserver getDefault() {\r
+ return inst;\r
+ }\r
+\r
+ public abstract void addCharacterDataChangeListener(\r
+ CharacterDataChangeListener l);\r
+\r
+ public abstract void removeCharacterDataChangeListener(\r
+ CharacterDataChangeListener l);\r
+\r
+ public abstract void notifyCharacterDataChange(CharacterDataChangeEvent e);\r
+\r
+ public void notifyCharacterDataChange(Object wnd, CharacterData cd,\r
+ boolean changeStructure, boolean reloadPartsAndFavorites) {\r
+ if (cd == null) {\r
+ throw new IllegalArgumentException();\r
+ }\r
+ notifyCharacterDataChange(new CharacterDataChangeEvent(wnd, cd,\r
+ changeStructure, reloadPartsAndFavorites));\r
+ }\r
+}\r
+\r
+class CharacterDataChangeObserverImpl extends CharacterDataChangeObserver {\r
+\r
+ private EventListenerList listeners = new EventListenerList();\r
+\r
+ @Override\r
+ public void addCharacterDataChangeListener(CharacterDataChangeListener l) {\r
+ listeners.add(CharacterDataChangeListener.class, l);\r
+ }\r
+\r
+ @Override\r
+ public void removeCharacterDataChangeListener(CharacterDataChangeListener l) {\r
+ listeners.remove(CharacterDataChangeListener.class, l);\r
+ }\r
+\r
+ @Override\r
+ public void notifyCharacterDataChange(CharacterDataChangeEvent e) {\r
+ if (e == null) {\r
+ throw new IllegalArgumentException();\r
+ }\r
+ CharacterDataChangeListener[] lst = listeners\r
+ .getListeners(CharacterDataChangeListener.class);\r
+ for (CharacterDataChangeListener l : lst) {\r
+ l.notifyChangeCharacterData(e);\r
+ }\r
+ }\r
+}\r
+\r
import charactermanaj.graphics.io.UkagakaImageSaveHelper;\r
import charactermanaj.model.AppConfig;\r
import charactermanaj.model.CharacterData;\r
+import charactermanaj.model.CharacterDataChangeEvent;\r
+import charactermanaj.model.CharacterDataChangeListener;\r
+import charactermanaj.model.CharacterDataChangeObserver;\r
import charactermanaj.model.ColorGroup;\r
import charactermanaj.model.IndependentPartsSetInfo;\r
import charactermanaj.model.PartsCategory;\r
* \r
* @author seraphy\r
*/\r
-public class MainFrame extends JFrame implements FavoritesChangeListener {\r
+public class MainFrame extends JFrame\r
+ implements\r
+ FavoritesChangeListener,\r
+ CharacterDataChangeListener {\r
\r
private static final long serialVersionUID = 1L;\r
\r
}\r
\r
/**\r
- * インポートされパーツが増減した可能性がある場合に呼び出される.\r
- * \r
- * @param cd\r
- * 対象\r
- * @param newCd\r
- * インポートされたcd\r
- * @param caller\r
- * 呼び出しもとメインフレーム\r
- * @throws IOException\r
- * 例外\r
- */\r
- public static void notifyImportedPartsOrFavorites(\r
- final CharacterData cd,\r
- final CharacterData newCd,\r
- final Component caller\r
- ) throws IOException {\r
- if (cd == null || newCd == null || caller == null) {\r
- throw new IllegalArgumentException();\r
- }\r
-\r
- if (!cd.isValid() || !newCd.isValid()) {\r
- // 変更前もしくは変更後が無効なキャラクターデータであれば\r
- // 反映する必要ない.\r
- return;\r
- }\r
- logger.log(Level.FINE, "parts imported for active profiles: " + newCd);\r
-\r
-\r
- if ( !cd.isSameStructure(newCd)) {\r
- // キャラクターデータそのものが変更されている場合\r
- notifyChangeCharacterData(cd, newCd, caller);\r
-\r
- } else {\r
- // パーツ構成は変更されていない場合\r
-\r
- // Frameのうち、ネイティブリソースと関連づけられているアクティブなフレームを調査\r
- for (Frame frame : JFrame.getFrames()) {\r
- if (frame.isDisplayable() && frame instanceof MainFrame) {\r
- final MainFrame mainFrame = (MainFrame) frame;\r
- if (mainFrame.characterData == null || !mainFrame.characterData.isValid()) {\r
- // 無効なキャラクターデータを保持している場合は、そのメインフレームは処理対象外\r
- continue;\r
- }\r
- SwingUtilities.invokeLater(new Runnable() {\r
- public void run() {\r
- // パーツ及びお気に入りを再取得する場合.\r
- try {\r
- Cursor oldCur = mainFrame.getCursor();\r
- mainFrame.setCursor(Cursor\r
- .getPredefinedCursor(Cursor.WAIT_CURSOR));\r
- try {\r
- mainFrame.reloadPartsAndFavorites(newCd, true);\r
-\r
- } finally {\r
- mainFrame.setCursor(oldCur != null ? oldCur : Cursor.getDefaultCursor());\r
- }\r
-\r
- } catch (Exception ex) {\r
- ErrorMessageHelper.showErrorDialog(mainFrame, ex);\r
+ * キャラクターデータが変更された場合に通知される.\r
+ */\r
+ public void notifyChangeCharacterData(final CharacterDataChangeEvent e) {\r
+ final CharacterData cd = e.getCharacterData();\r
+ if (cd != null\r
+ && cd.getDocBase().equals(\r
+ MainFrame.this.characterData.getDocBase())) {\r
+ SwingUtilities.invokeLater(new Runnable() {\r
+ public void run() {\r
+ try {\r
+ Cursor oldCur = getCursor();\r
+ setCursor(Cursor\r
+ .getPredefinedCursor(Cursor.WAIT_CURSOR));\r
+ try {\r
+ if (e.isChangeStructure()) {\r
+ // 現在情報の保存\r
+ saveWorkingSet();\r
+\r
+ // 画面構成の再構築\r
+ initComponent(cd);\r
}\r
- }\r
- });\r
- }\r
- }\r
- }\r
- }\r
-\r
- /**\r
- * キャラクターデータが変更されたことを通知される.<br>\r
- * \r
- * @param cd\r
- * キャラクターデータ(変更前)\r
- * @param newCd\r
- * キャラクターデータ(変更後)\r
- * @param caller\r
- * 呼び出しもとコンポーネント(ウェイトカーソル表示用)\r
- * @param structureCompatible\r
- * 構造が同一であるか?\r
- * @throws IOException\r
- * 新しいキャラクターデータのパーツセットのロードに失敗した場合 (メインフレームは変更されていません.)\r
- */\r
- public static void notifyChangeCharacterData(\r
- final CharacterData cd,\r
- final CharacterData newCd,\r
- final Component caller\r
- ) throws IOException {\r
- if (cd == null || newCd == null || caller == null) {\r
- throw new IllegalArgumentException();\r
- }\r
-\r
- if (!cd.isValid() || !newCd.isValid()) {\r
- // 変更前もしくは変更後が無効なキャラクターデータであれば\r
- // 反映する必要ない.\r
- return;\r
- }\r
- logger.log(Level.FINE, "change active profile: " + newCd);\r
\r
- if (!ProfileListManager.isUsingCharacterData(cd)) {\r
- // 使用中のプロファイルではないので何もしない.\r
- return;\r
- }\r
+ if (e.isReloadPartsAndFavorites()) {\r
+ // パーツとお気に入りのリロード\r
+ reloadPartsAndFavorites(cd, true);\r
+ }\r
\r
- caller.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));\r
- try {\r
- // キャラクターデータが、まだ読み込まれていなければ読み込む.\r
- if (!newCd.isPartsLoaded()) {\r
- ProfileListManager.loadCharacterData(newCd);\r
- ProfileListManager.loadFavorites(newCd);\r
- }\r
-\r
- // Frameのうち、ネイティブリソースと関連づけられているアクティブなフレームを調査\r
- for (Frame frame : JFrame.getFrames()) {\r
- if (frame.isDisplayable() && frame instanceof MainFrame) {\r
- final MainFrame mainFrame = (MainFrame) frame;\r
- if (mainFrame.characterData == null || !mainFrame.characterData.isValid()) {\r
- // 無効なキャラクターデータを保持している場合は、そのメインフレームは処理対象外\r
- continue;\r
- }\r
+ } finally {\r
+ setCursor(oldCur != null ? oldCur : Cursor\r
+ .getDefaultCursor());\r
+ }\r
\r
- // メインフレームが保持しているキャラクターデータのdocbaseと\r
- // 変更対象となったキャラクターデータのdocbaseが等しければ、メインフレームを更新する必要がある.\r
- String docbaseOrg = cd.getDocBase().toString();\r
- String docbaseMine = mainFrame.characterData.getDocBase().toString();\r
- if (docbaseOrg.equals(docbaseMine)) {\r
- SwingUtilities.invokeLater(new Runnable() {\r
- public void run() {\r
- try {\r
- Cursor oldCur = mainFrame.getCursor();\r
- mainFrame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));\r
- try {\r
- // 現在情報の保存\r
- mainFrame.saveWorkingSet();\r
-\r
- // 画面構成の再構築\r
- mainFrame.initComponent(newCd);\r
-\r
- } finally {\r
- mainFrame.setCursor(oldCur != null ? oldCur : Cursor.getDefaultCursor());\r
- }\r
-\r
- } catch (RuntimeException ex) {\r
- ErrorMessageHelper.showErrorDialog(mainFrame, ex);\r
- }\r
- }\r
- });\r
+ } catch (Exception ex) {\r
+ ErrorMessageHelper.showErrorDialog(MainFrame.this, ex);\r
}\r
}\r
- }\r
-\r
- } finally {\r
- caller.setCursor(Cursor.getDefaultCursor());\r
+ });\r
}\r
}\r
\r
*/\r
public void notifyChangeFavorites(FavoritesChangeEvent e) {\r
CharacterData cd = e.getCharacterData();\r
- if (cd.getDocBase().equals(MainFrame.this.characterData.getDocBase())) {\r
- if (!MainFrame.this.equals(e.getSource())) {\r
- // お気に入りを最新化する.\r
- // (ただし、自分自身から送信したイベントの場合はリロードの必要はない)\r
- refreshFavorites();\r
+ if (cd != null\r
+ && cd.getDocBase().equals(\r
+ MainFrame.this.characterData.getDocBase())) {\r
+ if (!MainFrame.this.equals(e.getSource())\r
+ && !characterData.equals(cd)) {\r
+ // プリセットとお気に入りを最新化する.\r
+ // ただし、自分自身から送信したイベントの場合は最新化は不要.\r
+ characterData.clearPartsSets(false);\r
+ for (Map.Entry<String, PartsSet> entry : cd.getPartsSets()\r
+ .entrySet()) {\r
+ PartsSet partsSet = entry.getValue();\r
+ characterData.addPartsSet(partsSet);\r
+ }\r
}\r
\r
// お気に入り管理ダイアログ上のお気に入り一覧を最新に更新する.\r
// お気に入り変更通知を受け取る\r
FavoritesChangeObserver.getDefault().addFavoritesChangeListener(\r
this);\r
+ // キャラクターデータの変更通知を受け取る\r
+ CharacterDataChangeObserver.getDefault()\r
+ .addCharacterDataChangeListener(this);\r
\r
// メインスクリーンサイズを取得する.\r
GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment();\r
public void dispose() {\r
FavoritesChangeObserver.getDefault()\r
.removeFavoritesChangeListener(this);\r
+ CharacterDataChangeObserver.getDefault()\r
+ .removeCharacterDataChangeListener(this);\r
imageLoader.close();\r
stopAgents();\r
super.dispose();\r
CharacterData cd = this.characterData;\r
CharacterData newCd = ProfileListManager.editProfile(this, cd);\r
if (newCd != null) {\r
- MainFrame.notifyChangeCharacterData(cd, newCd, this);\r
+ CharacterDataChangeObserver.getDefault()\r
+ .notifyCharacterDataChange(this, newCd, true, true);\r
}\r
\r
} catch (Exception ex) {\r
\r
if (importWizDialog.getExitCode() == ImportWizardDialog.EXIT_PROFILE_UPDATED) {\r
CharacterData importedCd = importWizDialog.getImportedCharacterData();\r
- notifyImportedPartsOrFavorites(characterData, importedCd, this);\r
+ CharacterDataChangeObserver.getDefault()\r
+ .notifyCharacterDataChange(this, importedCd,\r
+ false, true);\r
}\r
\r
} finally {\r
ManageFavoriteDialog dlg = new ManageFavoriteDialog(this, characterData);\r
dlg.setFavoriteManageCallback(new FavoriteManageCallback() {\r
\r
- public void refreshFavorites(CharacterData cd) {\r
- // お気に入りの状態を最新にリフレッシュする.\r
- MainFrame.this.refreshFavorites();\r
- }\r
-\r
public void selectFavorites(PartsSet partsSet) {\r
// お気に入り編集ダイアログで選択されたパーツを選択表示する.\r
selectPresetParts(partsSet);\r
lastUseManageFavoritesDialog = dlg;\r
}\r
\r
- /**\r
- * 最新のお気に入りの状態を取り出す.<br>\r
- */\r
- protected void refreshFavorites() {\r
- logger.log(Level.FINE, "refresh Favorites.: " + characterData);\r
- try {\r
- setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));\r
- try {\r
- CharacterDataPersistent persiste = CharacterDataPersistent.getInstance();\r
- characterData.clearPartsSets(true);\r
- persiste.loadFavorites(characterData);\r
- } finally {\r
- setCursor(Cursor.getDefaultCursor());\r
- }\r
-\r
- } catch (Exception ex) {\r
- logger.log(Level.WARNING, "can't refresh favorites: " + characterData, ex);\r
- }\r
- }\r
-\r
protected void onRegisterFavorite() {\r
if (!characterData.isValid()) {\r
Toolkit tk = Toolkit.getDefaultToolkit();\r
public interface FavoriteManageCallback {\r
\r
/**\r
- * キャラクターデータのお気に入り状態を最新にする.\r
- * \r
- * @param cd\r
- */\r
- void refreshFavorites(CharacterData cd);\r
-\r
- /**\r
* 引数で指定されたパーツセットを表示する.\r
* \r
* @param partsSet\r
}\r
});\r
\r
- if (callback != null) {\r
- callback.refreshFavorites(this.characterData);\r
- }\r
-\r
initListModel();\r
\r
updateButtonUI();\r
import charactermanaj.graphics.io.LoadedImage;\r
import charactermanaj.model.AppConfig;\r
import charactermanaj.model.CharacterData;\r
+import charactermanaj.model.CharacterDataChangeObserver;\r
import charactermanaj.model.io.CharacterDataDefaultProvider;\r
import charactermanaj.model.io.CharacterDataPersistent;\r
import charactermanaj.model.io.PartsImageDirectoryWatchAgent;\r
\r
/**\r
* プロファイルを選択するためのダイアログ、およびデフォルトプロファイルを開く\r
- *\r
+ * \r
* @author seraphy\r
*/\r
public class ProfileSelectorDialog extends JDialog {\r
\r
/**\r
* プロファイルの選択ダイアログを構築する.\r
- *\r
+ * \r
* @param parent\r
* 親フレーム、もしくはnull\r
* @param characterDatas\r
\r
/**\r
* サンプルピクチャパネルにドロップされた画像ファイルをサンプルピクチャとしてコピーします.<br>\r
- *\r
+ * \r
* @param dtde\r
* ドロップイベント\r
*/\r
\r
/**\r
* プロファイルの作成\r
- *\r
+ * \r
* @param makeDefault\r
* デフォルトのプロファイルで作成する場合\r
*/\r
}\r
\r
// 現在開いているメインフレームに対してキャラクター定義が変更されたことを通知する.\r
- MainFrame.notifyChangeCharacterData(cd, newCd, this);\r
+ CharacterDataChangeObserver.getDefault().notifyCharacterDataChange(\r
+ this, newCd, true, true);\r
\r
// プロファイル一覧画面も更新する.\r
characterListModel.set(selRow, newCd);\r
} else if (importWizDialog.getExitCode() == ImportWizardDialog.EXIT_PROFILE_UPDATED) {\r
\r
// 更新されたプロファイルを通知する\r
- MainFrame.notifyImportedPartsOrFavorites(cd, newCd, this);\r
+ CharacterDataChangeObserver.getDefault()\r
+ .notifyCharacterDataChange(this, newCd, true, true);\r
}\r
\r
} finally {\r