[cocomonar-dev] 掲示板リストの編集(上・下)

Back to archive index

KUROKI Masayuki m_kurok****@mac*****
2003年 8月 7日 (木) 19:52:32 JST


黒木です。

最近、スレで要望が何度が出ている、掲示板リストの編集で上下ボタンに反応 
しない問題
に取り組んでいます。これバグではなくって単なる実装もれですね。

ざっと、実装したところ大体はうまくいくようになったのですが、うまく動か 
ない部分も
あり、ちょっと仕様のアドバイスをお願いします。

現在の仕様は以下の通り
・単数行選択以外では上下ボタンは無反応。
・お気に入りは対象外
・先頭行で上、最下行で下を押しても無反応。
・カテゴリーをまたいでの移動はしない。つまり、カテゴリー内で最上位から上
 を押しても無反応。

ここで問題点は
1)別カテゴリーへの移動や、左へ右へという移動はできない。
 上下ボタンの仕様を変更して対応するか?その場合にはどのような動作がよいか?
 あるいは、D&Dでの移動をできるようにして、そちらを利用してもらえばよいか?
2)複数行選択には現在未対応ですが、どのように対応すればよいでちょうか?
 問題は、一番上の行が含まれている場合にどのようにするかです。
 つまり、2行目、3行目を選択して上としたときの期待する動作は 
(1,2,3,...)->(2,3,1,...)
 ですが、1行目、2行目を選択した場合、(1,2,3,...)->(1,2,3,...)となりそうです。
 でも1行目、3行目の時は(1,2,3,...)->(1,3,2,...)なのか(1,2,3,...)->(1,2,3,...)
 のどちらが上記二つの動作と整合しているのかがわかりません。

あと、takanori_isさんは帰省中はパッチの反映などはできないのでしたっけ?

--以下、現在の対応ソース。
<BoardListEditor.m>
- (IBAction) moveItem : (id) sender
{
     int usr_rowIndex_;
     NSDictionary *usr_selItem_;
     int direction_;

// 複数行選択は未対応
     if ( 1 != [[self userListTable] numberOfSelectedRows] ) {
         return;
     }
     usr_rowIndex_ = [[self userListTable] selectedRow];
     usr_selItem_  = [[self userListTable] itemAtRow : usr_rowIndex_];
     if ( NULL == usr_selItem_ ) return;
     direction_ = [(NSControl*)sender tag];
     [[self userList] moveItem:usr_selItem_ direction:direction_];
}


<BoardList.h>(下記行をインスタンスメソッドの最後に追加)
- (void) moveItem:(NSDictionary *)item direction:(int)direction;


<BoardList.m>
/**
   * 項目のリスト内での順序を変更する。
   * 階層をまたいでの順序変更や、別のグループへの移動は行わない。
   *
   * @param    item    	移動対象のitem
   * @param    direction	移動方向。 0 ... 上、1 ... 下
   */
- (void) moveItem:(NSDictionary *)item direction:(int)direction
{
	NSString       *url_;
	NSString       *name_;
	NSDictionary   *item_;
	NSMutableArray *container_;
	unsigned int    index_;
	unsigned int    insert_index_;

	url_ = [item objectForKey : BoardPlistURLKey];
	name_ = [item objectForKey : BoardPlistNameKey];
	if( NULL != url_) {
                 item_ = [self itemForAttribute : url_
                         attributeKey : BoardPlistURLKey
                         seachMask : BoardListBoardItem
                         containsArray : &container_
                         atIndex : &index_];
         } else if ( NULL != name_ ) {
                 item_ = [self itemForAttribute : name_
                         attributeKey : BoardPlistNameKey
                         seachMask : (BoardListBoardItem | 
BoardListCategoryItem)
                         containsArray : &container_
                         atIndex : &index_];
         } else {
                 return;
         }


         switch ( direction ) {
         case 0:// 上へ
             if ( index_ == 0 ) {
                 return;
             }
             insert_index_ = index_ - 1;
             break;
         case 1:// 下へ
             if ( index_ == [container_ count] - 1 ) {
                 return;
             }
             insert_index_ = index_ + 1;
             break;
         }
         [item retain];
         [container_ removeObjectAtIndex:index_];
         [container_ insertObject:item atIndex:insert_index_];
         [item release];
	[self postBoardListDidChangeNotification];
}

-- 
黒木 政幸		Masayuki KUROKI
mailto:m_kurok****@mac*****
http://homepage3.nifty.com/eien-factory/



cocomonar-dev メーリングリストの案内
Back to archive index