問題タブ [undo-redo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
927 参照

cocoa - [元に戻す]および[やり直し]メニュー項目にアクション文字列が追加されていることを確認するにはどうすればよいですか?

アプリで元に戻す/やり直しができました。

undoAction:メソッドとredoAction:メソッドを使用してアクションを実装するために、undoおよびredoメニューアクションのターゲットをアプリデリゲートに設定しました。メニュー項目で有効になっているバインディングは、undo managerのcanUndoプロパティとcanRedoプロパティにバインドされており、これらは期待どおりに機能します。元にしたスタックにプッシュするときにアクション名を設定しましたが、メニューに表示されません。

メニューに、[ゴミ箱に移動を元に戻す]や[ゴミ箱に移動をやり直し]ではなく、常に[元に戻す]または[やり直し]と表示されるのはなぜですか?メニュー項目は通常、バイパスしている魔法によって更新されますか?アプリデリゲートがレスポンダーチェーンに含まれておらず、アクションが表示されないため、レスポンダーチェーンを使用していません。

UNDOマネージャーは私のアプリデリゲートで作成されます。

更新:ウィンドウのUNDOマネージャーを使用するように変更しても違いはありません。

0 投票する
3 に答える
3732 参照

mysql - undo-redo を使用して SQL データベースを設計する方法は?

Undo-Redo を許可するように DB テーブルを設計する方法を見つけようとしています。

次の構造を持つタスクテーブルがあるとします。

ここで、数日にわたって複数のログインが行われ、複数の編集が行われたと仮定します。しかし、ユーザーはいずれかのバージョンに戻りたいと考えています。

  1. 変更を追跡する別のテーブルを用意しますか?それとも、タスクテーブル内に変更を保持しようとしますか(より適切な用語がないため、「ゴースト」行)。
  2. すべての列を追跡しますか、それとも毎回変更された列だけを追跡しますか?

問題があれば、MySQL を使用しています。また、問題があれば、履歴 (ala Photoshop) を表示して、ユーザーが任意のバージョンに切り替えられるようにしたいと考えています。

おまけの質問:memo変更時にセル全体を保存しますか、それともデルタのみを保存しようとしますか? 私が尋ねる理由は、memoセルが大きくなる可能性があり、リビジョンごとに 1 つの単語または文字のみが変更される可能性があるためです。確かに、デルタを保存するには解析が必要ですが、元に戻す操作がそれほど頻繁に行われないと予想される場合は、処理時間よりもスペースを節約する方がよいのではないでしょうか?

ご協力ありがとうございました。

0 投票する
2 に答える
2305 参照

vim - VIM:: 指定したテキストまたはその周辺の変更を元に戻す

VIM では、特定のテキスト ブロック上またはその周辺の変更を元に戻すことはできますか? のすぐ上"if yes"で A を変更し、ファイルの他の場所で B、C、D、および E を変更するとします。vimに「から+/- 10行で行われた変更を元に戻すことはできif yesますか?

これが不可能であるか、少なくともバニラvimでは不可能であることを示唆する別の質問に出くわしました。この動作を可能にするプラグインを知っている人はいますか?

0 投票する
2 に答える
2017 参照

objective-c - NSUndoManager のやり直しスタックをクリアする

私のアプリケーションでは、ユーザーに「やり直し」をクリックするオプションを与えずに、プログラムで元に戻したいアクションがいくつかあります。のやり直しスタックをクリアする方法はありますNSUndoManagerか? そうでない場合、サブクラス化NSUndoManagerする必要があった場合、再実行スタックをクリアするためにアクセスする方法はありますか? ドキュメントからの方法がわかりませんでした。

または、現在のネストされた取り消しグループからの変更を、やり直しスタックに取り込まずに元に戻す方法はありますか? ネストされた元に戻すグループを既に構築しています。

0 投票する
5 に答える
38666 参照

vim - Vim の永続的な取り消しを使用していますか?

Vim 7.3 の新機能の 1 つは「永続的な取り消し」です。これにより、バッファーを終了するときに取り消しツリーをファイルに保存できます。

残念ながら、私はそれを適切に有効にすることができていないか、間違った使い方をしているに違いありません. これが私がこれまでに試したことです:

~/.vimrc に以下を追加しました

この後、おそらく任意のファイルを開いて編集し、保存して閉じることができるはずです。もう一度開くと、元に戻したことがないかのように元に戻したりやり直したりできるはずです。残念ながら、元に戻すファイルが書き込まれたことがないため、これは当てはまらないようです。

ノート:

  1. Vim without cream プロジェクトの Vim 7.3 を使用して Win 7 を使用しています。永続的な取り消しが組み込まれています。

  2. ファイルシステムに $HOME/.vim/undo が存在する

0 投票する
1 に答える
1306 参照

c# - WPF の Visual Studio スタイルの元に戻す/やり直しボタン

Visual Studio の元に戻す/やり直しボタンのような外観と機能を持つリボンの元に戻す/やり直しボタンを作成したいと考えています。私は、RibbonSplitButton を使用して動作を模倣しようとしましたが、Items プロパティ内のメニュー項目のみを受け入れることが判明しました。これについてどうすればよいか考えている人はいますか?前もって感謝します。

ps最悪のシナリオは、既存の分割ボタンをオーバーライドするカスタムコントロールを作成することですが、何をオーバーライドするか知っている人はいますか?

0 投票する
1 に答える
1937 参照

wpf - WPF RibbonControlsLibrary RibbonSplitButton 項目の問題

Visual Studioの元に戻すやり直しボタンを模倣するために、RibbonSplitButtonをドロップダウンのメニュー項目に使用しています。元に戻すとやり直しのスタックがあり、スタックに基づいて UI を更新する dependencypropertychanged イベント ハンドラーがあります。問題は、splitbutton の items プロパティが Collection を使用していて、アイテムのコレクションが正しい順序になっているにもかかわらず、インデックス順に並べられているため表示されないことです。

これをよりよく説明するために、以下にいくつかの例を示します。

コード:

XAML:

実際の元に戻すメニュー項目

コード内のメニュー項目を元に戻す

PS 0 の挿入を Add に変更しても、コレクションの最初ではなく最後に追加されますが、違いはないようです...何が起こっているのかについて誰かが私に情報を与えることができればこれを回避する方法については、非常に高く評価されます。前もって感謝します。

0 投票する
6 に答える
5274 参照

c# - Undo / Redoを実装するための良いコレクションですか?

私は元に戻る/やり直しのテクニックを読んでいましたが、それをどのように実装すべきかを理解しています(直感的だと思いました)。

しかし、私は歴史として使われるべきコレクションについて考えています、

多くの人がスタックを使用しますが、C#スタックは配列として実装されており、これは問題です。「制限された」履歴を使用する場合(たとえば、2000コマンドの場合)、制限に達したときに、スタックの最後からアイテムを削除する方法。それを行う方法を見つけた場合は、配列のすべての要素を移動する必要があります(コマンドが実行されるたびにこれを移動します)。

LinkedListは見栄えがしますが、多くのメモリを浪費します。

私の最後のオプションは、リンクリスト、SingleLinkedListのカスタム実装です。このリストのノードはValueプロパティとNextNodeポインタプロパティで構成されているため、各アイテムにダブルメモリを使用しています(ただし、「sizeof(void *)」よりも小さいものを使用している場合を除いて、それ以上は使用しません)。

コレクションの最初の要素へのポインターと最後の要素へのポインターも格納しています。

この方法でコマンドを履歴に簡単に追加してREDO履歴に移動できますが、RemoveLastが許可されていないため、「制限付き」履歴を作成できません(最後のアイテムを削除するには、コレクション全体を調べる必要があります)。

だから私の質問は:LinkedListまたはカスタムSingleLinkedListを使用する必要がありますか?

アップデート1:

現時点で回答をありがとうございます。私の状況では、メモリの問題はありません。誰をターゲットにしているのかわかりません。ユーティリティプログラムを作成しています。私自身の「ユーティリティプログラム」のアイデアでは、可能な限り最小限のCPU/メモリを浪費する必要があります(大きな違いがあるので、明らかに「c ++で書く」とは言わないでください)。

私の意見では、singlelinkedlistはうまく機能します。履歴を制限するのは好きではありません。あなたの履歴が「無制限」である、Photoshopについて考えています。

私は、8時間の使用のように、元に戻す履歴が本当に大きくなったときに何が起こるかを恐れているだけです。そのため、LinkedListを使用して制限することを考えていました。

ただし、他の誰かが述べたように、リンクリストを大きなサイズ、約60000コマンド(十分なはずだと思います)に制限すると、シングルリンクリストと比較して、わずかなメモリ(4バイト* 60000)しか無駄になりません。

そうは言っても、私はLinkedListを使用すると思いますが、念のために言っておきますが、無制限に履歴を使用していれば大丈夫でしたか?

アップデート2:

@Akash Kavaええと、あなたが言うことは重要ですが、なぜLinkedListを使用したいのか、なぜスタックを使用したくないのかを誤解していました。Stackの主な問題は、サイズを制限する必要があることです。この制限に達したときに古いコマンドをすばやく削除する方法はありません(これは配列であり、必要なものではないたびに次元が2倍になります)。

単一のリンクリスト(どのように構築されるかを考えてください)はスタックとして高速であり(すべてのスタック操作はO(1)です)、制限はありません。ただし、この場合、制限を設ける必要はありません。そうしないと、スタックと同じ問題が発生します。わからないため、singlelinkedlistの最後の要素(スタックのように動作します)をすばやく削除する方法がありません。最後のノードからの前のノード要素。

この場合、非常に簡単なので、PreviousポインターがあるLinkedListについて考えることができます。ただし、「スタック」(今回はリンクリストを介して構築されます)の各要素に2つの追加のポインターを使用しています。これは、コマンドを格納するために必要なメモリの3倍のメモリを使用するようなものです(通常のメモリを備えた配列を使用)。使用量、singlelinkedlistのメモリ使用量は2倍、linkedlistのメモリ使用量は3倍です)。

だから私が基本的に求めていたのは、元に戻るパターンのスタックを実装するための「最良の」コレクションはどれかということです。

あなたの答えは、私が1つのプログラムで60000のコマ​​ンドを作成したとしても、それはプログラムの約5MBのメモリであり、それほど多くはないと思いました。

基本的に、元に戻す/やり直しの履歴を制限したい場合はLinkedListが必要です。それ以外の場合は、SingleLinkedListの方が適しています。

0 投票する
3 に答える
685 参照

c# - C# の元に戻す/やり直すコードが何もしない

私のタイル エディターには、元に戻すとやり直すという 2 つの TileMaps スタックがあります。ユーザーが変更を行うたびに、マップの状態がスタックに追加され、変更が行われます。これが私の元に戻すコードです:

ただし、マップは変更されません。なんで?